OpenSSL: Come creare un certificato con un DN soggetto vuoto?


14

È possibile creare una richiesta di certificato PKCS # 10 / certificato X.509 con le informazioni identificative solo nell'attributo / estensione del nome alternativo soggetto? Secondo X.509 4.1.2.6 Oggetto , l'oggetto può essere vuoto per un certificato il cui oggetto non è una CA a condizione che subjectAltName sia critico.

Ma quando uso questo file di configurazione con una sezione distinguished_name vuota:

# 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

e comandi

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

OpenSSL si lamenta:

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

Risposte:


11

Questo ha funzionato per me:

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

Genera 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

Firma il 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

Visualizza il certificato risultante

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

8

Ho anche incontrato questo errore "nessun oggetto specificato". Stava mostrando un prompt come questo per vari campi:

US []:

E stavo solo premendo invio perché avevo già impostato questi valori nel file .cnf. Si scopre che avevo bisogno di digitare nuovamente tutti i valori e poi ha funzionato.


Ho dovuto fare lo stesso. Nonostante abbia inserito i valori nel file di configurazione, mi ha ancora richiesto di nuovo tutti i componenti DN. Ho dovuto ripeterli, ma ha funzionato almeno.
Nate W.,

3
Questo perché il file di configurazione in realtà non conteneva valori predefiniti. C = USsignifica che il "prompt" per C è "US", non il valore predefinito. Invece, il file dovrebbe contenere C = Countrye C_default = US.
jordanbtucker,

5
Oh, e questo è solo se prompt = yes [or blank]. Se prompt = noquindi C = USsignifichi "US" è il valore predefinito.
jordanbtucker,

3

Il problema è con prompt = nonella configurazione originale. Che rende openssl reqpresuppongono che si intende specificare le voci argomenti nei file di configurazione e colpisce un controllo preliminare in req.c .

C'è una soluzione alternativa: Rimuovi prompt = noe invece aggiungi -subj /alla tua openssl reqriga di comando. Ecco uno script di esempio che produce sia un CSR che un certificato autofirmato:

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

Prova "commonName = optional" nelle sezioni della politica nel file di configurazione di openssl.


1

Sembra che tu abbia inserito un singolo valore dal gruppo "distinguished_name" dalla tua tastiera e funziona bene ... Voglio dire, non devi inserire altri valori e puoi usare il loro valore predefinito (come menzionato nel file openssl.conf) che ha detto

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

Should work fine.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.