# openssl_ca **Repository Path**: rx_z/openssl_ca ## Basic Information - **Project Name**: openssl_ca - **Description**: 基于QT的CA系统演示程序,使用openssl接口,可模拟小型证书中心操作 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 19 - **Forks**: 7 - **Created**: 2015-12-15 - **Last Updated**: 2025-03-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README -------- 基于OpenSSL的证书中心 =================== -------- ###项目概要 **OpenSSL_CA**使用C++语言编写,开发框架为QT(mingw)5.7.0,~~支持跨平台~~ 程序使用OpenSSL提供的**include文件**以及**lib库** 目前已完成具备基本操作的1.0版本,正在重写2.0版本 -------- ###目前情况 **已经完成的内容:** > - 证书请求文件的生成 > - 文件传输功能(内网) > - 根证书对请求文件签名,验证及撤销发布证书 > - 撤销及恢复被撤销的证书 > - 初步将根证书签名整合至2.0版本 > - 用户申请证书时可选择密钥对的bits长度 > - 基本完善工程目录结构 > - Server对证书颁布、撤销链、时效进行验证 > - 根证书生成新的撤销链 > - 整合了JSON文件操作的代码 > - 对原有函数进行优化 > - 客户端可选择生成具备或不具备口令的私钥 **8.26修复严重错误** > - 原始公私钥对在客户端生成,但证书中只能够传递公钥信息,在服务器端错误地使用公钥填充了私钥生成函数,导致.key文件无效 **现在存在的问题:** > - **V1.0**: 1. 在X509中没有找到相应修改文件路径的函数,在使用中生成的文件都存放在opensslca.exe同级目录下,无法组织合理的文件结构 2. 生成证书请求文件时,大部分函数返回值没有进行判断或没有合理的返回操作,导致代码健壮性不足,无法获取相应的错误判断,程序崩溃时无法快速定位错误位置 3. 存在函数功能重合,变量定义冗余情况 4. 没有规范代码命名规则,注释不全 5. V1.0(ji)偶(ben)尔(bu)修复现有bug,(juedui)不再更新功能 > - **V2.0**: 1. 在2.0版本中分离了客户端和CA中心服务器,目前只完成了文件传输操作,在传输初始时未实现数字信封 2. 客户端仅对部分输入框进行了正则规范 3. ~~证书预览显示窗内容使用循环读取,但i值似乎是随机的,无法直接准确定位至lineEdit~~ 4. 由于系统逻辑中存在同时依赖json和撤销链文件的操作,所以推荐将生成撤销链功能注释掉。 5. ...... **接下来的工作:** > - ~~在V1.0的基础上重写V2.0版本~~ > - 继续完善注释、变量及函数规范 > - ~~调整界面布局~~ > - 完成V2.0版本CA服务器剩余功能 > - 继续完成JSON文件读写,同时考虑数据库的使用 -------- ###错误排除 > **可能遇到的问题** > - **编译时可能遇到的问题** 1. 由于qt的xx.pro项目文件中引入openssl/include与/lib使用了绝对路径,可能导致复制的代码在构建时无法找到对应的目录 **解决方法:**使用相同的格式将xx.pro文件中关于该引用的三行代码自行改为对应的正确路径,重新构建项目 2. 低版本qt中可能会遇到文件流读取的错误 **解决方法:**在.ToStdString后面加上.c_str() > - **运行时可能遇到的问题** 1. 在构思工程目录结构完毕后,将所有代码中使用的目录都以全局变量与局部变量组合的方式完成,在选择文件时更改目录可能引发程序崩溃 2. 如果出现程序提示生成用户证书及私钥却无法在文件夹中找到,可能因为不存在这个文件夹,自行添加即可 > - **Windows中证书文件打开** 1. 经过测试,用户提交512bits证书请求时,生成的crt证书文件在windows证书浏览窗中提示无效签名,改用1024或2048bits生成请求文件即可 > - **JSON文件索引值问题** 1. 可能存在arrest出jsonarray范围问题,是因为输入的jsonarray索引与json文件中的size不匹配,这时需要查看core文件夹下的json文件 **解决方法:**确保signlist.json文件中有内容并且格式正确,如果不确定可以先按正确步骤签发一个证书填充该json文件 > - **V1.0版本中的一个错误** 1. 在签发和撤销证书的两个ListWidget中,使用了currentRowChange作为信号,但两次的Row共用了同一个全局变量储存索引, 如果在点击事件发生后切换至另一个tab时可能会引起索引混乱 ---------