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

ves*_*rto 6 unicode ssl certificate

我已经创建了一个自签名SSL证书,并且使用它没有问题,但是浏览器(Firefox,Chrome / IE)在组织名称中显示乱码(ASCII上面的任何字符都有2个字符)。

我在运行在virtualbox(Win主机)上的Debian中创建了证书,外壳的语言环境均为* .UTF-8,为此我使用了CA.pl。我可以使用Unicode字符创建文件,没有其他问题,但是该证书具有“Organizaução”而不是“Organização”。

有小费吗?转义字符(如何)?是否将语言环境简化为ISO / IEC 8859-1?使用一些非shell方法?我缺少明显的东西吗?

附带说明一下,是否有一种简单的方法(即4ummies™)来分发证书,因此用户只需单击并安装即可?我见过的所有指南都包含了太多的窗口,普通用户无法理会。并且无需安装浏览器,每次用户访问时浏览器都会发出尖叫声(Firefox除外,Firefox允许通过警告框轻松安装)。

编辑1

检查asn1parse联机帮助页并使用其示例:

openssl asn1parse -genstr 'UTF8:Organização'
Run Code Online (Sandbox Code Playgroud)

产生:

0:d=0  hl=2 l=  17 prim: UTF8STRING        :Organização
Run Code Online (Sandbox Code Playgroud)

所以我认为这是输入问题。这是我的语言环境信息:

LANG=pt_PT.utf8
LANGUAGE=en_US:en
All LC_* fields="pt_PT.utf8"
LC_ALL=
Run Code Online (Sandbox Code Playgroud)

我可以轻松地触摸Organização或其他任何带有非ASCII字符的文件,但我的CA证书却被愚蠢地降低到8位。

编辑2

我从教程开始,但是继续阅读OpenSSL手册。在阅读该书的req时候,我在错误部分中遇到了这个问题由于T61String处理的结果,在OpenSSL中表示重音字符的唯一正确方法是使用BMPString

所以我尝试了:

openssl asn1parse -genstr 'BMP:Organização'
Run Code Online (Sandbox Code Playgroud)

并以一个空字符串结尾:

0:d=0  hl=2 l=  26 prim: BMPSTRING
Run Code Online (Sandbox Code Playgroud)

ves*_*rto 7

遵循另一个教程并将证书创建调整为:

openssl req -new -x509 -days 365 -utf8 -out cert.pem -keyout key.pem
Run Code Online (Sandbox Code Playgroud)

我选择用问题的答案填充默认配置文件(而不是通过提示提供它们)并添加一个带注释的非 ASCII 字符只是为了确保它是一个 unicode 文件(我猜有点不必要,但file让我高兴地说UTF-8 Unicode 文本)。