• OpenSSL生成正确显示中文证书的方法


    OpenSSL生成正确显示中文证书的方法

    作者:刘凯 mslk.sa@gmail.com      来源:http://blog.csdn.net/mslk     发表时间:2006-10-23     浏览次数: 3896      字号:    

    用openssl生成正确显示中文的证书的方法

                         \author    刘凯 mslk.sa@gmail.com

    最近要用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 -in server.req -out server.crt -signkey privkey.pem -days 365

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

  • 相关阅读:
    IOS 11 通讯录手机号「隐形字符」的 Bug
    本地添加const参数 防止短信接口恶意调用
    javascript阿拉伯数字 转 汉字中文数字
    js去掉数组的空字符串
    Chrome 清除某个特定网站下的缓存
    vue-cli中的babel配置文件.babelrc详解
    提交到github报错Please tell me who you are
    跨域问题
    js单线程、js任务队列、异步操作
    Java 异常
  • 原文地址:https://www.cnblogs.com/adylee/p/899408.html
Copyright © 2020-2023  润新知