
Auf meinem PC mit installiertem Windows 10 muss ich OpenSSL verwenden. Ich habe die Version 1.0.2n heruntergeladen und bin dieser Anleitung gefolgt:Erstellen eines SSL-Zertifikats mit mehreren HostnamenIch habe die Konfigurationsdatei openssl.cfg (befindet sich unter C:\OpenSSL-Win64\bin) geändert.
Nach einigen Tests kann ich problemlos sowohl Schlüssel als auch Zertifikate generieren.
Mein Problem ist folgendes: meine Angaben zur Zertifikatsgenerierung sind so, dass dieAlternativer Betreffnamedarf nur 1 Wert haben und muss mit dem übereinstimmenGemeinsamen NamenFeld. Wenn ich also (Zertifikat ausfüllen) das Feld commonName mitexample.com, außerdem muss der alternative Antragstellernameexample.com. Ich weiß, dass ich die CFG-Datei jederzeit ändern und den Wert für den SAN im Abschnitt „v3-req“ manuell festlegen kann, aber ich möchte dies vermeiden; ich suche nach einer Möglichkeit, den Wert zu kopieren, den ich für den allgemeinen Namen im SAN-Feld abgebe.
Also habe ich Folgendes versucht: Ich bin in der Datei openss.cfg zum Abschnitt „v3 req“ gegangen und habe ihn folgendermaßen geändert:
[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = commonName:copy
Das heißt, ich habe versucht, die Funktion :copy zu nutzen, aber leider funktioniert diese Aktion nicht. Wenn ich nach der Zertifikatsgenerierung den Befehl starte
req -text -noout -in <filename.csr>
Um mein Zertifikat zu verifizieren, erhalte ich im entsprechenden Abschnitt Folgendes:
X509v3 Subject Alternative Name:
DNS:commonName.copy
Wie Sie sehen, ist die Ausgabe die rechte Seite meiner Deklaration unter dem [alt_names]
Abschnitt.
Die Fragen lauten also: Gibt es eine Methode, um den CommonName an den alternativen Betreffnamen zu vererben? Und wenn ja, wie?
Antwort1
Dient ${section::name}
zum Lesen zuvor definierter Variablen.
Hier ist ein Beispiel, das funktioniert:
[ req ]
prompt = no
string_mask = default
# The size of the keys in bits:
default_bits = 2048
distinguished_name = req_dn
req_extensions = req_ext
[ req_dn ]
# Or traditional org style:
countryName = gb
organizationName = example
commonName = acme.example.test
[ req_ext ]
subjectAltName = @alt_names
[alt_names]
DNS.1 = ${req_dn::commonName}
DNS.2 = alt.example.test
Gefolgt von:
openssl req -nodes -new -keyout test.key -out test.csr -config ./openssl.cnf
Das führt zu:
openssl req -noout -text -in test.csr
Geben:
...
Attributes:
Requested Extensions:
X509v3 Subject Alternative Name:
DNS:acme.example.test, DNS:alt.example.test
Signature Algorithm: sha256WithRSAEncryption
92:1c:e0:0e:6d:7d:2e:b4:64:c5:ab:ff:6a:37:dd:35:98:58:
...