OpenSSL: Cara membuat sertifikat dengan subjek DN kosong?

14

Apakah mungkin untuk membuat permintaan sertifikat PKCS # 10 / sertifikat X.509 dengan informasi pengidentifikasi hanya dalam atribut / ekstensi nama subjek alternatif? Menurut X.509 4.1.2.6 Subjek , subjek dapat kosong untuk sertifikat yang subjeknya bukan CA selama subjectAltName sangat penting.

Tetapi ketika saya menggunakan file config ini dengan bagian empty_name kosong:

# 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:[email protected]

dan perintah

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

OpenSSL mengeluh:

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

Jawaban:

11

Ini bekerja untuk saya:

file test-no-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:[email protected],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

Hasilkan 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

Tandatangani 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

Lihat sertifikat yang dihasilkan

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

Saya juga mengalami kesalahan "tidak ada objek yang ditentukan" ini. Itu menampilkan prompt seperti ini untuk berbagai bidang:

US []:

Dan saya hanya menekan enter karena saya sudah menetapkan nilai-nilai ini dalam file .cnf. Ternyata saya harus mengetik semua nilai lagi, dan kemudian berhasil.

Oran Dennison
sumber
Saya harus melakukan hal yang sama. Meskipun menempatkan nilai dalam file konfigurasi, masih meminta saya untuk semua komponen DN lagi. Saya harus mengulanginya, tetapi setidaknya berhasil.
Nate W.
3
Ini karena file konfigurasi sebenarnya tidak mengandung nilai default. C = USberarti "prompt" untuk C adalah "US", bukan nilai default. Sebaliknya, file tersebut harus berisi C = Countrydan C_default = US.
jordanbtucker
5
Oh, dan itu hanya jika prompt = yes [or blank]. Jika prompt = nokemudian C = USberarti "AS" adalah nilai default.
jordanbtucker
3

Masalahnya dengan prompt = nodalam konfigurasi asli. Merek yang openssl reqmenganggap Anda berniat untuk menentukan entri subjek dalam file konfigurasi dan hits cek awal di req.c .

Ada solusinya: Hapus prompt = no, dan bukannya tambahkan -subj /ke openssl reqbaris perintah Anda . Berikut ini contoh skrip yang menghasilkan CSR dan sertifikat yang ditandatangani sendiri:

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:[email protected]
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
jsha
sumber
2

Coba "commonName = opsional" di bagian kebijakan di file konfigurasi openssl.

Artem
sumber
1

Tampaknya Anda memasukkan nilai satu saja dari grup '"differished_name" dari keyboard Anda dan berfungsi dengan baik ... Maksud saya Anda tidak perlu memasukkan nilai-nilai lain dan dapat menggunakan standarnya (seperti disebutkan dalam file openssl.conf) yang mengatakan

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

Should work fine.
hardeep
sumber