2013-05-10 32 views
7

Tôi đang cố gắng tạo Yêu cầu ký chứng chỉ với chủ đề UTF-8.Cách tạo CSR với chủ đề utf8 trong openssl?

$ 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: 

ga encoding là UTF-8, tôi nhận được cùng một vấn đề khi tôi sử dụng dòng lệnh đối tượng (...) -subj /C=PL/ST=zażółć\ gęślą\ jaźń/O=my-company/CN=ThisIsMeForSure

Khi tôi bỏ qua -utf8 switch, CSR được tạo ra với tất cả các ký tự khác ASCII thay thế với ký hiệu hex (ví dụ: ó trở thành \xC3\xB3). CSR như vậy không thể đọc được đúng với php (openss_x509_parse) - bản gốc ó được đọc là bốn byte, đại diện cho hai ký tự lạ ...

Tôi đang làm gì sai?

+0

Sử dụng 'openssl req' * nếu không có * tệp conf tùy chỉnh nghĩa là tên máy chủ sẽ nằm trong' CN'. Thực hành đó không được chấp nhận bởi cả IETF và Diễn đàn CA/B. Thay vào đó, bạn nên đảm bảo tên máy chủ (và địa chỉ IP) nằm trong 'SAN'. Xem, ví dụ: [Cách tạo chứng chỉ tự ký với openssl?] (Http://stackoverflow.com/a/27931596) (câu trả lời được sử dụng cho cả yêu cầu ký và chứng chỉ tự ký). Và 'string_mask = utf8only' được đặt trong tệp conf. – jww

Trả lời

1

Hãy thử sử dụng tùy chọn string_mask:

string_mask

Tùy chọn này mặt nạ ra việc sử dụng các loại chuỗi nhất định trong các lĩnh vực nhất định. Hầu hết người dùng sẽ không cần phải thay đổi tùy chọn này.

Có thể đặt thành nhiều giá trị mặc định cũng là tùy chọn mặc định sử dụng PrintableStrings, T61Strings và BMPStrings nếu giá trị pkix được sử dụng thì chỉ có thể sử dụng PrintableStrings và BMPStrings. Điều này tuân theo khuyến nghị PKIX trong RFC2459. Nếu sử dụng tùy chọn utf8only thì chỉ UTF8Strings sẽ được sử dụng: đây là khuyến nghị PKIX trong RFC2459 sau năm 2003. Cuối cùng tùy chọn nombstr chỉ sử dụng PrintableStrings và T61Strings: phần mềm nhất định có vấn đề với BMPStrings và UTF8Strings: cụ thể là Netscape.

+2

Rõ ràng điều này (string_mask) là không đủ. (Điều này cho thực tế mã UTF-8 vào các ký tự, nhưng không xử lý chúng theo cách đó trong khi hiển thị trong nhiều công cụ). '-utf8' hoặc' utf8 = yes' là con đường để đi. (Kiểm tra theo kinh nghiệm). – Cromax

+0

@Cromax bạn nói đúng. Bạn có thể đưa ra câu trả lời từ nhận xét không? –

+0

@Vlastimil Câu trả lời được đánh giá cao nhất đã bao gồm công tắc '-utf8', vì vậy tôi không thực sự chắc chắn liệu có cần thiết cho điều đó hay không. Nó chỉ thêm làm rõ thêm, nhưng không có gì thực sự quan trọng. Cảm ơn bạn, bạn. – Cromax

0

Bất kỳ unicode nào hoạt động đối với tôi, từ tệp 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=中国/[email protected]" -config C:/Temp/openssl.cnf'); ?> 
9

Tôi đã thành công với lệnh

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

đâu example.com.cnf là một tập tin cấu hình trong UTF-8:

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

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

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

hiển thị đúng trong Chrome, Firefox và Safari.

+4

Thực tế, tùy chọn -nameopt multiline, utf8 là vô dụng trong ngữ cảnh này. Chỉ có -utf8 mới tạo ra sự khác biệt.Người dùng vẫn có thể tránh đặt tùy chọn này trên dòng lệnh với tệp cấu hình thích hợp. Chỉ cần thêm utf8 = yes vào phần [req]. Điều này nên là cách thích hợp để đi vì quên tùy chọn -utf8 trên dòng lệnh có thể dẫn đến kết quả không mong muốn. Khi hiển thị chứng chỉ, bạn cần sử dụng tùy chọn -nameopt utf8, tùy chọn -nameopt multiline, utf8 làm cho giá trị utf8 bị bỏ qua đối với tôi. OpenSSL phiên bản 1.0.2h. – Achille

+2

Tôi đã xác nhận tùy chọn '-utf8' một mình là đủ. 'openssl req -new -newkey rsa: 2048 -sha256 -nodes -utf8 -subj"/C = JP/ST = 大阪 府/L = 大阪 市/O = 架空 の 社 名 の の 例/OU = あ/CN = www.example.jp "-out ./clients/$client_domain/$client_domain.csr.pem -keyout./clients/$ client_domain/$ client_domain.key.pem' ' $ dpkg-query -W -f = '$ {Version} \ n' openssl' 1.0.2g-1ubuntu4.5 Cảm ơn, Achille! – hnakamur

+0

bạn không cung cấp email bằng tiếng Anh. Bạn có lý do cụ thể nào cho @Envek đó không? –