OpenSSL: Làm thế nào để tạo chứng chỉ với một chủ đề trống DN?


14

Có thể tạo yêu cầu chứng chỉ PKCS # 10 / chứng chỉ X.509 với thông tin nhận dạng chỉ trong thuộc tính / phần mở rộng tên thay thế của chủ đề không? Theo X.509 4.1.2.6 Chủ đề , chủ đề có thể trống đối với chứng chỉ có chủ đề không phải là CA miễn là chủ đềAltName quan trọng.

Nhưng khi tôi sử dụng tệp cấu hình này với phần phân biệt tên trống:

# request.config
[ req ]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no

[ req_distinguished_name ]

[ v3_req ]
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName=critical,email:certtest@example.com

và các lệnh

openssl genrsa 1024 > key.pem
openssl req -new -key key.pem -out req.pem -config request.config

OpenSSL phàn nàn:

error, no objects specified in config file
problems making Certificate Request

Câu trả lời:


11

Điều này làm việc cho tôi:

tập tin kiểm tra-không-cn.cnf

[req] 
default_bits       = 4096
encrypt_key        = no
default_md         = sha256
distinguished_name = req_distinguished_name
req_extensions = v3_req

[ req_distinguished_name ]

[ v3_req ]
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName=critical,email:certtest@example.com,URI:http://example.com/,IP:192.168.7.1,dirName:dir_sect

[dir_sect]
C=DK
O=My Example Organization
OU=My Example Unit
CN=My Example Name

Tạo CSR

openssl req -new -newkey rsa:4096 -nodes -config test-no-cn.cnf -subj "/" -outform pem -out test-no-cn.csr -keyout test-no-cn.key

Ký CSR

openssl x509 -req -days 365 -in test-no-cn.csr -signkey test-no-cn.key -out test-no-cn.crt -outform der -extensions v3_req -extfile test-no-cn.cnf

Xem giấy chứng nhận kết quả

openssl x509 -inform der -in test-no-cn.crt -noout -text

8

Tôi cũng gặp phải lỗi "không có đối tượng được chỉ định" này. Nó đã hiển thị một dấu nhắc như thế này cho các lĩnh vực khác nhau:

US []:

Và tôi chỉ nhấn enter vì tôi đã đặt các giá trị này trong tệp .cnf. Hóa ra tôi cần phải nhập lại tất cả các giá trị, và sau đó nó hoạt động.


Tôi đã phải làm như vậy. Mặc dù đặt các giá trị trong tệp cấu hình, nó vẫn nhắc tôi cho tất cả các thành phần DN một lần nữa. Tôi đã phải lặp lại chúng, nhưng nó đã làm việc ít nhất.
Nate W.

3
Điều này là do tệp cấu hình không thực sự chứa các giá trị mặc định. C = UScó nghĩa là "dấu nhắc" cho C là "US", không phải giá trị mặc định. Thay vào đó, tập tin nên chứa C = CountryC_default = US.
jordanbtucker

5
Ồ, và đó chỉ là nếu prompt = yes [or blank]. Nếu prompt = nosau đó C = UScó nghĩa là "US" là giá trị mặc định.
jordanbtucker

3

Vấn đề là prompt = notrong cấu hình ban đầu. Điều đó làm cho openssl reqgiả sử bạn có ý định để xác định mục đối tượng trong tập tin cấu hình và truy cập một kiểm tra sơ bộ trong req.c .

Có một cách giải quyết: Xóa prompt = no, và thay vào đó thêm -subj /vào openssl reqdòng lệnh của bạn . Đây là tập lệnh ví dụ tạo cả CSR và chứng chỉ tự ký:

cat > openssl.cnf <<EOF
[ req ]
distinguished_name = req_distinguished_name
req_extensions = v3_req

[ req_distinguished_name ]

[ v3_req ]
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName=critical,email:certtest@example.com
EOF
openssl req -newkey rsa:2048 -config openssl.cnf -nodes -new -subj "/" \
  -out req.csr
openssl req -newkey rsa:2048 -config openssl.cnf -nodes -new -subj "/" \
  -x509 -out cert.crt

2

Hãy thử "commonName = tùy chọn" trong các phần chính sách trong tệp cấu hình openssl.


1

Có vẻ như bạn nhập bất kỳ một giá trị nào từ nhóm '"differished_name" từ bàn phím của bạn và nó hoạt động tốt ... Tôi có nghĩa là bạn không cần nhập các giá trị khác và có thể sử dụng mặc định của chúng (như được đề cập trong tệp openssl.conf)

[ req ]
...
distinguished_name = req_distinguished_name
prompt = no
...

Should work fine.
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.