Có thể thực hiện openssl bỏ qua lời nhắc quốc gia / tên thông thường không?


82

Có cách nào để làm cho openssl bỏ qua các lời nhắc như

Country Name (2 letter code) [US]:
Organization Name (eg, company) [My Company Name LTD.]:
Common Name (eg, YOUR name) [something]:

Trong khi tạo chứng chỉ với

openssl req -config openssl.cnf -new -x509 ...

thực tế là các thông số đó được cung cấp trong openssl.cnftệp

ví dụ

countryName         = Country Name (2 letter code)
countryName_default     = US
countryName_min     = 2
countryName_max     = 2
0.organizationName      = Organization Name (eg, company)
0.organizationName_default  = My Company Name LTD.
commonName          = Common Name (eg, YOUR name)
commonName_max      = 64
commonName_default      = ${ENV::CN}

3
Bạn có thể chuyển những thứ đó dưới dạng tham số trên dòng lệnh. Tôi không nhớ lại cú pháp.
indiv 11/11/11

1
cảm ơn, nó hoạt động! -subj '/C=US/ST=Oregon/L=Portland/CN=www.madboa.com'là con đường để đi
Tzury Bar Yochay

Câu trả lời:



35

Một giải pháp khác bao gồm sử dụng promptchỉ thị trong tệp cấu hình của bạn .
Xem OpenSsl: Định dạng tệp cấu hình

prompt

nếu được đặt thành giá trị, nođiều này sẽ vô hiệu hóa việc nhắc nhở các trường chứng chỉ và chỉ lấy các giá trị từ tệp cấu hình trực tiếp. Nó cũng thay đổi định dạng dự kiến ​​của các phần distinguished_nameattributes.

Có hai định dạng riêng biệt cho phần distinguished nameattribute.

Nếu tùy chọn lời nhắc được đặt thành nothì các phần này chỉ bao gồm tên trường và giá trị : ví dụ:

 CN=My Name
 OU=My Organization
 emailAddress=someone@somewhere.org

Điều này cho phép các chương trình bên ngoài (ví dụ: dựa trên GUI) tạo tệp mẫu với tất cả các tên và giá trị trường và chỉ cần chuyển nó vào req.

Ngoài ra, nếu tùy chọn nhắc không có hoặc không được đặt thành không thì tệp sẽ chứa thông tin nhắc trường. Nó bao gồm các dòng có dạng:

 fieldName="prompt"
 fieldName_default="default field value"
 fieldName_min= 2
 fieldName_max= 4

2
Đây phải là câu trả lời được chấp nhận. Nếu đã có tập tin cấu hình, không có lý do gì để cung cấp lại tùy chọn / CN / O / C là lệnh.
Aditya Vikas Devarapalli

1
@AdityaVikasDevarapalli 8 năm sau khi viết câu trả lời này, tôi đồng ý. Nhưng tôi thiên vị.
VonC

15

Tạo một tệp cấu hình và trong phần [yêu cầu] bạn có thể đặt prompt = no.

Ví dụ:

[req]
prompt = no
distinguished_name = req_distinguished_name
req_extensions = v3_req

[req_distinguished_name]
C = US
ST = California
L = Los Angeles
O = Our Company Llc
#OU = Org Unit Name
CN = Our Company Llc
#emailAddress = info@example.com

[v3_req]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = example.com
DNS.2 = www.example.com

Sau đó, chỉ cần thực hiện ví dụ:

openssl req -new -sha256 -config THATFILE.conf -key example.com.key -out example.com.csr

4

Một cách tiếp cận hỗn hợp không được hỗ trợ

Có thể trực quan khi nghĩ rằng một cách tiếp cận hỗn hợp là khả thi, trong đó bạn có thể nghĩ đến việc đặt một số trường tĩnh trong openssl.cnf và chỉ định một số (CN) thông qua -subjtùy chọn. Tuy nhiên, điều đó không hoạt động.

Tôi đã thử nghiệm một tình huống mà tôi

  • đặt C, ST, L, O và OU trong phần openssl.cnf req_distinguished_name
  • chạy openssl reqvới -subj=/CN=www.mydom.com.

openssl phàn nàn rằng trường Tên quốc gia bắt buộc bị thiếu và chứng chỉ được tạo chỉ có CN trong dòng chủ đề. Có vẻ như -subjtùy chọn ghi đè hoàn toàn dòng chủ đề và không cho phép cập nhật một trường.

Điều này làm cho cả ba cách tiếp cận cung cấp các trường chủ đề sau đây trở thành độc quyền cho nhau:

  • Lời nhắc
  • tập tin cấu hình
  • -subj Lựa chọn

Cảm ơn đã xác nhận điều này. Điều này thực sự nên được gắn cờ là một lỗi. Khi tôi chạy nó, nó -subjbị bỏ qua ngay cả khi được chỉ định sau -config.
Otheus

1

Các -batchtham số tùy chọn làm cho openssl reqlệnh để không nhanh chóng cho bất kỳ trường thông tin. Tôi sử dụng nó theo cách này mà không có tệp cấu hình để tự động hóa chứng chỉ tự ký.

Nó được liệt kê trong phần trợ giúp:

openssl help req
...
...
-batch              Do not ask anything during request generation
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.