OpenSSL: Wie erstelle ich ein Zertifikat mit einem leeren Betreff-DN?

14

Ist es möglich, eine PKCS # 10-Zertifikatanforderung / ein X.509-Zertifikat mit den identifizierenden Informationen nur im Attribut / der Erweiterung des alternativen Namens des Betreffs zu erstellen? Gemäß X.509 4.1.2.6 Betreff kann der Betreff für ein Zertifikat leer sein, dessen Betreff keine Zertifizierungsstelle ist, solange der BetreffAltName kritisch ist.

Aber wenn ich diese Konfigurationsdatei mit einem leeren Abschnitt "Distinguished_name" verwende:

# 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]

und Befehle

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

OpenSSL beschwert sich:

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

Antworten:

11

Das hat bei mir funktioniert:

test-no-cn.cnf Datei

[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

Generieren Sie die 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

Unterschreiben Sie die 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

Zeigen Sie das resultierende Zertifikat an

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

Ich bin auch auf diesen Fehler "Keine Objekte angegeben" gestoßen. Es wurde eine solche Eingabeaufforderung für verschiedene Felder angezeigt:

US []:

Und ich habe nur die Eingabetaste gedrückt, weil ich diese Werte bereits in der .cnf-Datei festgelegt hatte. Es stellte sich heraus, dass ich alle Werte erneut eingeben musste, und dann funktionierte es.

Oran Dennison
quelle
Ich musste das gleiche tun. Obwohl Werte in die Konfigurationsdatei eingefügt wurden, wurden ich erneut aufgefordert, alle DN-Komponenten einzugeben. Ich musste sie wiederholen, aber es hat zumindest funktioniert.
Nate W.
3
Dies liegt daran, dass die Konfigurationsdatei keine Standardwerte enthielt. C = USbedeutet, dass die "Eingabeaufforderung" für C "US" ist und nicht der Standardwert. Stattdessen sollte die Datei C = Countryund enthalten C_default = US.
Jordanbtucker
5
Oh, und das ist nur wenn prompt = yes [or blank]. Wenn prompt = nodann C = USbedeuten würde "US" ist der Standardwert.
Jordanbtucker
3

Das Problem liegt prompt = noin der ursprünglichen Konfiguration. Dies setzt openssl reqvoraus, dass Sie beabsichtigen, Betreffeinträge in der Konfigurationsdatei anzugeben, und führt eine vorläufige Prüfung in req.c durch .

Es gibt eine Problemumgehung: Entfernen Sie prompt = nound fügen -subj /Sie stattdessen Ihrer openssl reqBefehlszeile hinzu. Hier ist ein Beispielskript, das sowohl ein CSR- als auch ein selbstsigniertes Zertifikat erstellt:

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
quelle
2

Versuchen Sie "commonName = optional" in Richtlinienabschnitten in der openssl-Konfigurationsdatei.

Artem
quelle
1

Es scheint, dass Sie einen einzelnen Wert aus der Gruppe "Distinguished_name" über Ihre Tastatur eingeben und dies funktioniert einwandfrei. Ich meine, Sie müssen keine anderen Werte eingeben und können deren Standardwert (wie in der Datei openssl.conf erwähnt) verwenden

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

Should work fine.
hardeep
quelle