Utf 8 如何在openssl中使用utf8主题创建CSR?
我正在尝试生成具有UTF-8主题的证书签名请求Utf 8 如何在openssl中使用utf8主题创建CSR?,utf-8,openssl,csr,Utf 8,Openssl,Csr,我正在尝试生成具有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 ..............................................................................................
$ 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,当我使用命令行主题时,我会遇到同样的问题
(…)-subc/C=PL/ST=zażłć\gęślą\jaźń/O=my company/CN=ThisIsMeForSure
当我跳过-utf8
开关时,将生成CSR,其中所有非ascii字符都替换为十六进制符号(例如o
变为\xC3\xB3
)。这种CSR不能用php正确读取(openss\u x509\u parse
)-原始的被读取为四个字节,代表两个奇怪的字符
我做错了什么 尝试使用字符串掩码选项:
字符串掩码
此选项屏蔽了某些字段中某些字符串类型的使用。大多数用户不需要更改此选项
它可以设置为多个默认值,这也是默认选项使用可打印字符串、T61字符串和BMPString如果使用pkix值,则仅使用可打印字符串和BMPString。这遵循RFC2459中的PKIX建议如果使用utf8only选项,则仅使用UTF8Strings:这是RFC2459中2003年之后的PKIX建议。最后,nombstr选项只使用可打印字符串和t61字符串:某些软件在bmpstring和utf8string方面存在问题:特别是Netscape
任何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'); ?>
我已经成功地使用了命令
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.cnf
是UTF-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中正确显示。使用openssl req
而不使用自定义配置文件意味着服务器名称将位于CN
中。IETF和CA/B论坛都反对这种做法。相反,您应该确保服务器名称(和IP地址)位于SAN
中。例如,请参见(答案用于签名请求和自签名证书)。在conf文件中设置了string\u mask=utf8 only
。事实上,-nameopt multiline,utf8选项在此上下文中是无用的。只有-utf8起作用。用户仍然可以使用正确的配置文件避免在命令行上设置此选项。只需将utf8=yes添加到[req]部分。这应该是首选方法,因为忘记命令行上的-utf8选项可能会导致不希望的结果。当显示证书时,您需要使用-nameopt utf8选项,-nameopt multiline,utf8选项使我忽略utf8值。OpenSSL版本1.0.2h。我确认-utf8
选项就足够了<代码>openssl请求-new-newkey rsa:2048-sha256-nodes-utf8-subc”/C=JP/ST=大阪府/L=大阪市/O=架空の会社名の例/OU=あ/CN=www.example.jp“-out./clients/$client\u domain/$client\u domain.csr.pem-keyout./clients/$client\u domain/$client\u domain.key.pem
$dpkg query-W-f='${Version}\n'openssl
1.0.2g-1ubuntu4.5谢谢你,阿齐尔!您没有用非英语发送电子邮件。你对@Envek有什么特别的原因吗?我从来没有见过非拉丁语的电子邮件地址。如果需要在国际化域中指定邮箱,则需要在Punycode中指定域(在@之后)。但是我不知道用户名部分(在@之前)显然这个(字符串掩码)是不够的。(这实际上为字符提供了UTF-8代码,但在许多工具中显示时并没有这样处理)-utf8
或utf8=yes
是正确的选择。(经验性检查)。@Cromax你是对的。你能从评论中得到答案吗?@Vlastimil评分最高的答案已经包括了-utf8
开关,所以我不确定是否有必要这样做。它只是增加了额外的澄清,但没有什么真正重要的。谢谢你,你。