模块生成用户证书然后再由用户设定证书合并密钥证书服务器利用此密钥将证书合并为符合PKCS12规范的证书并提交给用户。
采用AES算法加密刚生成的用户证书并将加密结果存入公私钥证书数据库同时把用户公钥证书存入公钥证书/CRL数据库以便授权网关查询完成数字证书的签发和备份 3当用户证书发生损坏或丢失时用户向本系统申请恢复密钥经批准后系统查询公私钥证书库获取该用户的证书调用证书解密模块解密该用户证书。
接着利用用户新设定的密钥将解密后的证书封装成符合PKCS12规范的证书提交给用户完成证书的恢复功能。
4如果需要吊销本系统所签发的某一个用户证书时系统调用证书吊销列表产生模块将该证书序号加入证书吊销列表中并将结果发布在公钥证书/CRL数据库中以便授权网关查询。
2.3 各功能子模块的实现 2.3.1 开发环境配置 从官方网站下载OpenSSL6开发源码并在Window-XP环境下编译编译好以后会生成两个动态链接库即ssleay32.dll、libeay32.dll和两个静态链接库ssleay32.lib、libeay32.lib。
然后将ssleay32.dll、libeay32.dll拷贝至C:WINDOWSsystem32目录下并将ssleay32.lib、libeay32.lib和OpenSSL的头文件拷贝至Visual C 6.0默认库文件和默认头文件目录下这样就不需要在应用程序中作任何修改就可完成开发环境的配置。
2.3.2 根钥证书产生模块 根钥是一个自签名的数字证书是整个安全系统信任链的起始点它一般在系统刚建立或原有系统根钥到期时产生。
系统的所有应用都必须以根钥为基础才能展开因此能否正确生成正确的根钥对本系统的实现至关重要。
根钥产生流程如图4所示详细实现步骤如下 1创建应用程序工程并包含相关头文件如pem.h、x509.h、x509v3.h、pkcs12.h、rand.h等。
2调用BIO_new_file函数为公钥证书和私钥开辟存储空间调用EVP_PKEY_new和X509_new函数分别生成EVP_PKEY、X509对象利用Rand函数生成随机数种子。
3调用RSA_generate_key函数产生RSA密钥7对存储在RSA结构中调用EVP_PKEY_assign_RSA函数将密钥对从RSA结构中拷贝到EVP_PKEY结构中完成数据结构类型转换。
4调用X509_set_pubkey函数将EVP_PKEY对象中的RSA公钥赋给X509对象加入公钥证书的信息如版本号、证书拥有者的名称有效时间等然后调用X509V3_set_ctx 、X509V3_EXT_conf_nid函数加入证书的扩展信息如密钥算法等。
因为此证书是一个根钥证书所以证书拥有者与此证书签发者必须相同。
5调用EVP_sha1函数对公钥证书作数字摘要 X509_sign函数完成根私钥对根公钥证书的签名。
6调用PEM_write_bio_X509与PEM_write_bio_PrivateKey函数分别将公钥证书和私钥以PEM格式写入输出文件或内存中。
7释放相关资源。
2.3.3 用户证书产生模块 用户数字证书产生流程可以分为两步首先产生用户证书请求然后根据用户证书请求产生用户数字证书。
用户证书请求产生流程与根钥证书产生流程类似主要区别就是最终产生的结果是生成证书请求和私钥证书。
由于证书请求没有获得根私钥签名所以还不能参与实际应用它必须获得根私钥签名向别的开辟公钥/私钥证书的存储空间产生随机数种子生成EVP_PKEY对象生成X509与RSA对象产生RSA公钥与私钥对RSA对象转换为EVP_PKEY对象将根钥信息填充至x.509对象中填充x.509对象的公钥与扩展信息对x.509对象作数字摘要根私钥对x.509对象进行数字签名将公钥与私钥证书导出至文件释放相关资源加载libeay32.dll库与相关头文件图4 根钥产生流程图 2012-05-162012-05-162012-05-162012-05-162012-05-162012-05-16第6期 指挥控制与仿真 101 用户证明它的真实性与可用性另外它们所调用的函数也是有所区别的。
用户证书实现流程如图5所示。
图5 用户证书产生流程图 2.3.4 证书吊销列表CRL产生模块 当证书服务系统所签发的用户私钥泄漏、丢失或损坏时系统必须吊销该证书。
吊销就是将该证书的序列号加入证书吊销列表中并采用根私钥进行签名向所有与本系统相关的应用申明具有该序列号的用户证书已经失效。
用户在展开应用之前必须通过一定的方式获取证书吊销列表。
在本系统中采用由ACG主动向情报用户和RIG发送的方式保证他们都能够获得准确的证书吊销列表。
证书吊销列表有一定的有效期在已发布的证书吊销列表到期之前必须发布新的吊销列表具体发布周期可以根据系统所签发的证书数量大小确定。
证书吊销列表产生流程与用户证书产生流程类似通过调用X509_CRL_new函数生成X509_CRL对象具体流程如图6所示。
2.3.5 用户证书加解密模块 用户证书产生以后需要将证书发放给用户同时需要在证书数据库中备份。
根据需求的不同可以提供两种不同的加密方式一是由用户提供加密密钥按照PKCS12标准对用户证书进行封装并将封装好的证书提交给用户。
第二种是采用AES算法对用户证书进行加密并存入情报中心的公私钥证书数据库完成用户证书的加密备份。
1PKCS12封装用户证书 采用PKCS12封装用户证书并提供口令对用户证书进行保护的优点是用户丢失私钥或私钥被窃取时其他人很难获得可用的用户私钥从而提高用户私钥的安全性。
另一方面用户公钥证书和用户私钥是一一配对的通过此方法可以减少用户因为混淆密钥对而带来的麻烦提高用户证书的可用性。
实现步骤一般包括封装PKCS12包分解PKCS12包以及更改PKCS12包密码这三方面8限于篇幅本文不再赘述。
2AES算法加密用户证书 生成用户证书后情报需要对用户证书进行加密备份。
下转第105页 打开用户证书文件并获取长度加载libeay32.dll库与相关头文件加载密码算法初始化加密环境中间加密过程获取加密密钥是否成功提示出错原因是否中间过程是否结束是否最终加密过程是否成功是否输出密文并释放相关资源提示出错原因图7 AES算法加密用户证书流程图 加载根钥证书将须吊销证书序号加入吊销列表 检查根公钥与根私钥是否配对 加载所有相关算法 根私钥对撤销列表进行数字签名 将公钥与私钥证书导出至文件释放相关资源加载libeay 32. dll库与相关头文件生成X 509_CRL对象须吊销证书数是否为 0加入证书吊销列表主体信息退出程序须吊销证书数是否为 0是否 是 否图6 证书撤销列表产生流程 生成证书请求与用户私钥证书检查根公钥与根私钥是否配对 加载数字摘要算法 产生 RSA公钥与私钥对验证证书请求提取证书请求的主体信息提取证书请求的公钥加入签发者信息与证书主体信息根私钥对x . 509对象进行数字签名将公钥与私钥证书导出至文件释放相关资源加载libeay 32. dll 库与相关头文件生成X. 509对象加载根钥证书2012-05-162012-05-162012-05-162012-05-162012-05-162012-05-16第6期 指挥控制与仿真 105 Edit2-TextFloatToStrB2 /计算风速/ Edit9-SelStart4 Edit9-SelLength2 VStrToFloatEdit9-SelText VfVHz/H2 Edit3-TextFloatToStrVf /计算气压装定值/ Edit6-SelStart0 Edit6-SelLength3 h1StrToIntEdit6-SelText h2h11.33 h1013h2 Edit4-TextFloatToStrh 5 结束语 随着防空武器装备对火控系统射击精度要求的不断提高本文针对部队在某型高炮训练中出现的实际情况尝试利用软件解决弹道气象诸元不进行装定或装定时换算错误的问题实现了弹道风方位角和气压值的装定和换算具有一定的现实意义但在火控系统中对射击弹道风偏差量的修正问题还有许多方面需要提高有待进一步探讨。
参考文献 1 孙世宇. 自行高炮火控系统原理M.石家庄:军械工程学院1998. 2 王新富. 防空兵射击学M.郑州:防空兵指挥学院2004. 3 郑州高炮学院. 双管35mm牵引高射炮系统火控系统兵器M.郑州:郑州高炮学院1994.
上一篇:
MSMiner课程项目介绍【PPT
下一篇:
SPR联接疲劳失效的研究