16

我正在尝试使用 UTF-8 主题生成证书签名请求。

$ openssl req  -utf8 -nodes -newkey rsa:2048 -keyout my.private_key.pem -out my.csr.pem -text
Generating a 2048 bit RSA private key
......................................................................................................................................................................+++
......+++
writing new private key to 'my.private_key.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [PL]:
State or Province Name (full name) []:Zażółć gęślą jaźń
problems making Certificate Request
12376:error:0D07A07C:asn1 encoding routines:ASN1_mbstring_ncopy:illegal characters:a_mbstr.c:162:

终端编码是 UTF-8,当我使用命令行主题时遇到同样的问题 (...) -subj /C=PL/ST=zażółć\ gęślą\ jaźń/O=my-company/CN=ThisIsMeForSure

当我跳过-utf8开关时,生成的 CSR 将所有非 ascii 字符替换为十六进制表示法(例如ó变为\xC3\xB3)。这样的 CSR 不能用 php ( openss_x509_parse) 正确读取 - 原始ó被读取为四个字节,代表两个奇怪的字符......

我究竟做错了什么?

4

3 回答 3

27

我已经成功使用命令

openssl req -new -utf8 -nameopt multiline,utf8 -config example.com.cnf -newkey rsa:2048 -nodes -keyout example.com.key -out example.com.csr

example.com.cnfUTF-8 中的配置文件在哪里:

[req]
prompt = no
distinguished_name = dn
req_extensions = ext

[dn]
CN = Описание сайта                # Site description
emailAddress = envek@envek.name
O = Моя компания                   # My company
OU = Моё подразделение             # My dept
L = Москва                         # Moscow
C = RU

[ext]
subjectAltName = DNS:example.com,DNS:*.example.com

在 Chrome、Firefox 和 Safari 中正确显示。

于 2015-04-15T11:51:10.807 回答
2

尝试使用 string_mask 选项:

字符串掩码

此选项屏蔽了某些字段中某些字符串类型的使用。大多数用户不需要更改此选项。

它可以设置为多个默认值,这也是默认选项使用 PrintableStrings、T61Strings 和 BMPStrings,如果使用 pkix 值,则仅使用 PrintableStrings 和 BMPStrings。这遵循 RFC2459 中的 PKIX 建议。如果使用 utf8only 选项,则仅使用 UTF8Strings:这是 2003 年之后 RFC2459 中的 PKIX 建议。最后,nombstr 选项仅使用 PrintableStrings 和 T61Strings:某些软件在 BMPStrings 和 UTF8Strings 方面存在问题:尤其是 Netscape。

于 2013-06-03T20:08:59.297 回答
1

任何 unicode 都对我有用,来自 php 文件。

<? shell_exec('openssl req -new -md5 -utf8 -key C:/Temp/1.key -out C:/Temp/1.csr -subj "/C=MD/ST=ff/O=Religie/OU=Cen/CN=中国/emailAddress=test@religiasatanista.ro" -config C:/Temp/openssl.cnf'); ?>
于 2015-02-21T22:23:14.737 回答