So erben Sie den CommonName an den alternativen Betreffnamen

So erben Sie den CommonName an den alternativen Betreffnamen

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

verwandte Informationen