支持HW团队,就支付宝领取下面的红包吧!(2018年3月31前,就几毛,也会几块,可以和其他红包叠加使用),你领取消费,HW有奖励。红包使用无条件限制,有条件请注意是不是有病毒。

小伙伴们,给大家发红包喽!人人可领,领完就能用。祝大家领取的红包金额大大大!#吱口令#长按复制此消息,打开支付宝就能领取!er1OEj73Uj

登入 注册 | 验证
| 搜索
HelloWorld论坛 : > 计算机科学、技术、教学> 编程专题> 开源免费项目> [转]用openssl生成正确显示中文的证书的方法
 
 
 
 
类别:其他 阅读:5532 评论:0 时间:二月 17, 2014, 12:08 a.m. 关键字:openssl 中文

 

 来源:http://blog.csdn.net/mslk/article/details/1345972

最近要用openssl生成证书,来配合https一起使用,可是没有根证书的签名,只能自签名一下,当用户访问https时会有一个安全警告查看证书都是一堆字母和数字,里面如果能显示一些中文提示信息,就能让用户明白一些,这样可以少些问题。
openssl的req子命令创建的证书请求只能使用ASCIIUTF-8两种编码。
一开始创建的证书总是乱码,网上只找到了一篇文章[ http://www.infosecurity.org.cn/forum/read.php?fid=11&tid=201&fpage=1]是说如何创建中文证书的解决办法,其中还要修改openssl源代码,仔细看了他的修改方法,这是把所有的ASCII都作为UTF-8来处理了,因为主要修改的是:
switch(inform)的case MBSTRING_ASC
switch(outform)的case MBSTRING_ASC
部分的代码。

感觉他改的不对,就没有用他的办法改这部分代码,我就看了case MBSTRING_UTF8部分的代码,主要有两个函数比较重要,都在文件a_utf8.c中
switch(inform)时的UTF8_getc函数
switch(outform)时的UTF8_putc函数
里面的位操作很多,因一直对unicode的东西不熟悉,又看了UTF-8的资料,http://www.linuxforum.net/books/UTF-8-Unicode.html,这里摘录一下UTF-8的重要特性

    * UCS 字符 U+0000 到 U+007F (ASCII) 被编码为字节 0x00 到 0x7F (ASCII 兼容). 这意味着只包含 7 位 ASCII 字符的文件在 ASCII 和 UTF-8 两种编码方式下是一样的.
    * 所有 >U+007F 的 UCS 字符被编码为一个多个字节的串, 每个字节都有标记位集. 因此, ASCII 字节 (0x00-0x7F) 不可能作为任何其他字符的一部分.
    * 表示非 ASCII 字符的多字节串的第一个字节总是在 0xC0 到 0xFD 的范围里, 并指出这个字符包含多少个字节. 多字节串的其余字节都在 0x80 到 0xBF 范围里. 这使得重新同步非常容易, 并使编码无国界, 且很少受丢失字节的影响.
    * 可以编入所有可能的 231个 UCS 代码
    * UTF-8 编码字符理论上可以最多到 6 个字节长, 然而 16 位 BMP 字符最多只用到 3 字节长.
    * Bigendian UCS-4 字节串的排列顺序是预定的.
    * 字节 0xFE 和 0xFF 在 UTF-8 编码中从未用到.

强烈建议配合这些特性看这两个函数(UTF8_getcUTF8_putc,会很有收获的,能充分理解UTF-8。
可以肯定是,openssl中已完全实现了UTF-8的功能,可以制作中文证书。

经过各种试验终于可以在证书中使用UTF-8正确显示中文了,方法如下:
一、假设配置文件为openssl.cnf(在openssl-0.9.8.d/apps/目录下),编辑修改如下内容:
string_mask = utf8only
countryName_default                = CN
stateOrProvinceName_default    = 中文的省份名称
localityName_default                = 中文的城市名称
0.organizationName_default    = 组织、公司
organizationalUnitName_default    = 组织机构
commonName_default             = 刘凯的中文证书
二、用如下命令转换文件格式为UTF-8
iconv -f gbk -t utf-8 openssl.cnf > openssl_utf8.cnf
三、用openssl生成证书签名请求时,加上-utf8和将配置文件指定为openssl_utf8.cnf
openssl req -utf8 -config openssl_utf8.cnf -new -out server.req
除了输入密码,其他的一律enter,就OK了

然后将证书签名请求签名一下就生成有中文的证书了。
openssl x509 -req -in server.req -out server.crt -signkey privkey.pem -days 365

好了,安装一下server.crt,可以看看其中的中文信息。

相关博文 首页 上页 1 2 下页 尾页 共2条
[挂载人]初学MPEG [审核人]初学MPEG 推荐

个人签名--------------------------------------------------------------------------------

Please Login (or Sign Up) to leave a comment