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

时间:2014-05-11 23:06:50

标签: ssl unicode certificate

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

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

任何提示?逃离角色(如何)?将语言环境降低到ISO / IEC 8859-1?使用一些非shell方法?我错过了一些明显的东西吗?

另一方面,是否有一种简单的方法(即4ummies™)来分发证书,因此用户只需点击并安装即可?我见过的所有指南都涉及太多的窗户,供普通用户使用;如果没有安装它,浏览器会在每次用户访问时发出声音(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或任何其他带有非ASCII字符的文件时没有问题,但我的CA证书已经低至8位。

修改2

我从this教程开始,但继续阅读OpenSSL人。在阅读错误部分req时遇到的openssl asn1parse -genstr 'BMP:Organização' 人:由于T61String处理,在OpenSSL中表示重音字符的唯一正确方法是使用BMPString

所以我尝试了:

0:d=0  hl=2 l=  26 prim: BMPSTRING

并以空字符串结束:

{{1}}

2 个答案:

答案 0 :(得分:4)

关注another教程并将证书创建修改为:

openssl req -new -x509 -days 365 -utf8 -out cert.pem -keyout key.pem

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

答案 1 :(得分:1)

将字符串解码为escaped-ASCII并在命令行中指定。对于UniveristätInnsbruck,变音符号-a必须转换为ASCII字节。 Unicode表显示它是U + 00E4,必须用十六进制字符序列c3 a4表示。为了在命令行上获得它,我做:

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ätInnsbruck”。