openssl không thể tìm thấy 'phân biệt tên' trong cấu hình


40

Tôi nhận được lỗi sau từ openssl req:

unable to find 'distinguished_name' in config
problems making Certificate Request
41035:error:0E06D06C:configuration file routines:NCONF_get_string:no value:/SourceCache/OpenSSL098/OpenSSL098-52.30.1/src/crypto/conf/conf_lib.c:329:group=req name=distinguished_name

Tôi hiểu rằng đây là "Chủ đề" mà nó không thể tìm thấy Tuy nhiên, tôi đang xác định rằng:

openssl req -new \
    -key "$PRIVATE_KEY" \
    -sha256 \
    -config "$OPTIONS_FILE" \
    -subj "/C=US/ST=California/L=San Francisco/O=ACME, Inc./CN=*.*.$DOMAIN/" \
    -out "$CSR_FILENAME"

Gợi ý duy nhất của hướng dẫn là tệp cấu hình không tồn tại; Tôi có thể cat "$OPTIONS_FILE", vì vậy chắc chắn là có, và lỗi không phải do lỗi mà các ghi chú thủ công sẽ xảy ra nếu đây là trường hợp, vì vậy tôi khá chắc chắn opensslnhìn thấy tệp cấu hình.

Tập tin cấu hình của tôi chứa như sau:

[req]
req_extensions = v3_req

[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = *.*.example.com 

Đây là ví dụ điển hình trong các tài liệu .

Tôi làm gì sai ở đây?


1
Lưu ý nhỏ: chủ đềAltName được chỉ định ở đây, *.*.example.comkhông hợp lệ. (Bạn chỉ có thể có 1 *và chỉ trong thành phần ngoài cùng bên trái.) Điều này không liên quan đến vấn đề ở đây, nhưng đừng c / p một cách mù quáng.
Thanatos

Câu trả lời:


30

Gần như tôi có thể nói , -configđang ghi đè một số loại cấu hình nội bộ; nếu bạn thấy phần "EXAMPLES" cho trang man cho openssl req , nó sẽ hiển thị một ví dụ về tệp cấu hình có distinguished_nametrong đó. Theo linh cảm, tôi đã thêm vào phần sau vào cấu hình của mình:

[req]
…
distinguished_name = req_distinguished_name

[req_distinguished_name]
# empty.

Do đó, toàn bộ cấu hình của tôi trông giống như

[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name

[req_distinguished_name]

[v3_req]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = *.*.${DOMAIN}

(Lưu ý rằng ở đây, ${DOMAIN}không phải bằng chữ; bạn nên thay thế nó bằng tên miền DNS của bạn; Tôi tạo tệp này trong một bashtập lệnh với cat >"$OPTIONS_FILE" <<EOF, theo sau là ở trên, theo sau EOF)

openssl req … -subj <my subject> -config <that file> …sau đó lấy đối tượng của tôi từ dòng lệnh. Đối với những người quan tâm, toàn bộ lệnh cuối cùng trông giống như:

openssl req -new \
    -key "$PRIVATE_KEY" \
    -sha256 \
    -config "$OPTIONS_FILE" \
    -subj "/C=US/ST=California/L=San Francisco/O=My Company, Inc./CN=*.*.$DOMAIN/" \
    -out "$CSR_FILENAME"

Khi đăng bài này, tôi hiểu rằng SHA-1 không được dùng nữa cho X.509 certs, do đó -sha256(là một cờ không có giấy tờ), và objectAltName đang trở nên bắt buộc², do đó cần phải có cấu hình. Gotcha bổ sung duy nhất mà tôi biết để tạo CSR thực hành tốt nhất ở trên là bạn nên sử dụng kích thước khóa RSA ít nhất 2048 bit (nếu tôi đang sử dụng RSA, mà tôi đang sử dụng); bạn phải chỉ định kích thước cho openssl genrsalệnh vì mặc định hiện tại không an toàn.

¹Trong khi tôi không viết tại thời điểm tôi viết bài này, mọi người cảm thấy rằng đó chỉ là vấn đề thời gian. Xem "Dần dần
che nắng SHA1" ² Sử dụng CN cho tên miền không còn được khuyến nghị; Tôi không chắc chắn khi nào / nếu trình duyệt đang có kế hoạch loại bỏ điều này. "Tránh xa việc bao gồm và kiểm tra các chuỗi trông giống như tên miền trong Tên chung của chủ đề.", RFC 6125
Lưu ý: Tôi không chắc chắn về giá trị "chính xác" của keyUsage.


2
Xem ghi chú của tôi về câu hỏi; cấu hình trong câu trả lời này không hợp lệ, trong đó *.*.example.comkhông hợp lệ (bạn không thể có nhiều *s); c / p-ers hãy cẩn thận.
Thanatos

Phần trống req_distinguished_namekhông được chấp nhận bởi openssl 1.1.0f, do đó bạn phải có ít nhất countryName_defaultở đó (tham khảo Openssl.conf Walkthru ).
AntonK

12

Tôi đã có cùng một vấn đề và tìm thấy câu trả lời ở đây:

https://www.citrix.com/bloss/2015/04/10/how-to-create-a-csr-for-a-san-cert ve-on-netscaler /

Các tập tin cấu hình trông như thế này:

[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no
[req_distinguished_name]
C = US
ST = VA
L = SomeCity
O = MyCompany
OU = MyDivision
CN = www.company.com
[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = www.company.com
DNS.2 = company.com
DNS.3 = www.company.net 
DNS.4 = company.net 

Và sau đó:

openssl req -new -key private.key -sha256 -nodes -config openssl.conf -out certificate.csr

1
Điều này cũng sẽ làm việc; Tôi đã chỉ định chủ đề trên dòng lệnh (vì nó đơn giản hơn cho trường hợp sử dụng của tôi); Điều này chỉ cần di chuyển nó đến tập tin cấu hình. Hơn nữa, câu hỏi của tôi liên quan đến OpenSSL phàn nàn rằng chủ đề không thể được tìm thấy khi trên thực tế, nó đã được chỉ định.
Thanatos

Tôi không chắc liệu giải pháp này có hoạt động hay không - trong Windows, nó liên tục báo cáo "Không thể tìm thấy phân biệt tên trong cấu hình" đã thử mọi cách.
hagubear

1
Các req_distinguished_namephần có thể được để trống bên trái. Những gì nó làm là chỉ định mẫu nhãn của các tên trường bắt buộc, có thể được ghi đè bằng -subj= /C=xx/ST=xx/L=xx/O=xx/OU=xx/CN=xxv.v., đó là, không chỉ định các giá trị trường đó mặc dù.
Devy

5

Đối với tôi, lỗi này dường như là do tạo đường dẫn không chính xác khi chạy lệnh trong Windows Server 2012, C:\OpenSSL-Win32\bin

openssl req -new -sha256 -key private.pem -out example.csr

đưa ra lỗi không chặn trước khi yêu cầu vượt qua phare:

Không thể mở C: \ Tệp chương trình (x86) \ Tệp chung \ SSL / openssl.cnf để đọc, Không có tệp hoặc thư mục uch

Rõ ràng, đường dẫn không hợp lệ do dấu gạch chéo sai, vì vậy tệp cấu hình phải được thêm rõ ràng vào dòng lệnh:

openssl req -new -sha256 -key private.pem -config openssl.cfg -out example.csr

Điều này làm việc cho tôi, tốt đẹp và sạch sẽ. Cảm ơn rất nhiều!
Sossenbinder

Mặc dù điều này chắc chắn giải quyết vấn đề của bạn, nhưng nó không liên quan đến câu hỏi ban đầu ngoài việc phải làm w / OpenSSL. (Điều này có thể tốt hơn như một câu hỏi / câu trả lời riêng biệt.)
Thanatos

Điều này đã khắc phục sự cố của tôi với "openssl không thể tìm thấy 'phân biệt tên' trong cấu hình cảm ơn!
Chris31389

1

Lỗi tương tự này:

$ openssl req -x509 -newkey rsa: 4096 -keyout _key.pem -out cert.pem -day 365 -nodes Bạn sắp được yêu cầu nhập thông tin sẽ được tích hợp vào yêu cầu chứng chỉ của bạn. Những gì bạn sắp nhập là cái được gọi là Tên phân biệt hoặc DN. Có khá nhiều trường nhưng bạn có thể để trống một số trường Đối với một số trường sẽ có giá trị mặc định, Nếu bạn nhập '.', Trường sẽ được để trống. ----- Tên quốc gia (mã 2 chữ cái) [AU]: sự cố khi thực hiện Yêu cầu chứng chỉ

(Ubuntu 17.04) có nghĩa là "bạn cần thêm

-subj "/C=US/ST=California/L=San Francis co/O=ACME, Inc./CN=*.*.$DOMAIN/"

đến dòng lệnh "FWIW.


0

Một vấn đề khác có thể là các ký tự UTF-8 đặc biệt (vô hình). Kiểm tra tập tin của bạn bằng cách sử dụng

cat -v $OPTIONS_FILE
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.