如何在组织名称(或其他字段)中使用Unicode字符创建SSL证书?

如何在组织名称(或其他字段)中使用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

我已经创建了一个自签名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手册页并使用其示例:

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