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と、ASCII 以外のすべての文字が 16 進数表記に置き換えられた CSR が生成されます (例:óになります\xC3\xB3)。このような CSR は php ( ) では正しく読み取ることができませんopenss_x509_parse- オリジナルóは 2 つの奇妙な文字を表す 4 バイトとして読み取られます...

私は何を間違っていますか?

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 オプションを使用してみてください。

string_mask

このオプションは、特定のフィールドでの特定の文字列型の使用をマスクします。ほとんどのユーザーは、このオプションを変更する必要はありません。

いくつかの値に設定できます。これはデフォルト オプションでもあり、pkix 値が使用されている場合は PrintableStrings、T61Strings、および BMPStrings が使用され、PrintableStrings と BMPStrings のみが使用されます。これは、RFC2459 の PKIX 勧告に従います。utf8only オプションを使用すると、UTF8Strings のみが使用されます。これは、2003 年以降の RFC2459 での PKIX 勧告です。最後に、nombstr オプションは PrintableStrings と T61Strings のみを使用します。特定のソフトウェアでは、BMPStrings と UTF8Strings に問題があります。特に Netscape です。

于 2013-06-03T20:08:59.297 に答える
1

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 に答える