如何在组织名称(或其他字段)中使用Unicode字符创建SSL证书?
我已经创建了一个自签名SSL证书,使用它没有问题,但是浏览器(Firefox、Chrome/IE)在组织名称中显示了乱码(任何高于ASCII的都有2个字符) 我在virtualbox(Win主机)上运行的Debian中创建了证书,shell的区域设置都是*.UTF-8,为此我使用了CA.pl。我可以创建带有Unicode字符的文件,并且没有其他问题,但是cert使用了“OrganizauçÃo”而不是“Organizaução” 有什么建议吗?转义字符(如何转义)?将区域设置简化为ISO/IEC 8859-1?使用一些非shell方法?我错过了什么明显的东西吗 在旁注中,是否有一个简单的方法(即4分钟)™) 要分发证书,用户只需单击并安装即可?我看到的所有指南都涉及太多的窗口,普通用户很难使用;如果不安装证书,每次用户访问时浏览器都会发出尖叫声(Firefox除外,它允许通过警告框轻松安装) 编辑1 检查asn1parse手册页并使用其示例:如何在组织名称(或其他字段)中使用Unicode字符创建SSL证书?,ssl,unicode,certificate,Ssl,Unicode,Certificate,我已经创建了一个自签名SSL证书,使用它没有问题,但是浏览器(Firefox、Chrome/IE)在组织名称中显示了乱码(任何高于ASCII的都有2个字符) 我在virtualbox(Win主机)上运行的Debian中创建了证书,shell的区域设置都是*.UTF-8,为此我使用了CA.pl。我可以创建带有Unicode字符的文件,并且没有其他问题,但是cert使用了“OrganizauçÃo”而不是“Organizaução” 有什么建议吗?转义字符(如何转义)?将区域设置简化为ISO/IE
openssl asn1parse -genstr 'UTF8:Organização'
产生:
0:d=0 hl=2 l= 17 prim: UTF8STRING :Organização
所以我假设输入有问题。这是我的区域设置信息:
LANG=pt_PT.utf8
LANGUAGE=en_US:en
All LC_* fields="pt_PT.utf8"
LC_ALL=
我在触摸Organização或任何其他带有nonASCII字符的文件时没有问题,但我的CA证书被简化为8位
编辑2
我从教程开始,但接着阅读了OpenSSL man。在阅读req
man时,我在错误部分遇到了:作为T61字符串处理的结果,在OpenSSL中表示重音字符的唯一正确方法是使用BMPString
所以我试着:
openssl asn1parse -genstr 'BMP:Organização'
并以空字符串结束:
0:d=0 hl=2 l= 26 prim: BMPSTRING
遵循教程,并将证书创建调整为:
openssl req -new -x509 -days 365 -utf8 -out cert.pem -keyout key.pem
我选择用问题的答案填充默认配置文件(而不是通过提示提供答案),并添加了一个带注释的非ASCII字符,以确保它是一个unicode文件(我想这是不必要的,但
文件说UTF-8 unicode文本让我很高兴)
server=test.uibk.ac.at
openssl req -nodes -newkey rsa:2048 -keyout $server.key -out $server.csr \
-subj '/C=AT/ST=Tyrol/L=Innsbruck/O=Universit\\xC3\\xA4t Innsbruck/OU=IT Services/CN='"$server"
注意,双反斜杠和单引号都是必需的。要测试效果:
openssl x509 -in test.uibk.ac.at.crt -noout -text |grep Subject:
我们看到
Subject: C=AT, ST=Tyrol, L=Innsbruck, O=Universit\xC3\xA4t Innsbruck, OU=IT Services, CN=test.uibk.ac.at
在浏览器中,我们验证密钥并查看“Universität Innsbruck”正如预期的那样。我检查了很多网站:大多数网站的头都是ASCII字符,但有些网站确实使用非ASCII字符,因此这不是协议限制之类的。根据,organizationName
允许的类型是TeletextString
,printableString
,universalString
,utf8String代码>和bmpString
openssl.cnf
默认使用string\u mask=UTF8 only
。您是否对证书执行ASN.1转储以确保其不是UTF8(请参阅openssl asn1parse-in…
和)?您使用什么来显示证书和组织名称
?此问题似乎属于Stack Exchange网络中的另一个站点,因为它与编程无关。也许,或者。感谢提示,@jww,我已编辑了此问题。我正在使用浏览器:当它抱怨不信任时查看证书信息.我试过葡萄牙语和英语的firefox+win7,还有chrome。这还不够,当我在这里提到的-utf8
之外添加-nameopt multiline,utf8
时,它对我起了作用:那么这种转义有什么意义?Linux不能显示Unicode字符吗?如果我想得到原始的Universität Innsbruc呢k
通过解析证书在shell中的值-我该怎么做?好的,这对我来说很有用:-nameopt-lname,sep\u multiline,utf8