Wie kann ich mit OpenSSL ein selbstsigniertes Zertifikat mit SubjectAltName generieren? [geschlossen]

115

Ich versuche, ein selbstsigniertes Zertifikat mit OpenSSL mit SubjectAltName zu generieren. Während ich die CSR für das Zertifikat generiere, muss ich vermutlich v3-Erweiterungen von OpenSSL x509 verwenden. Ich benutze :

openssl req -new -x509 -v3 -key private.key -out certificate.pem -days 730

Kann mir jemand mit der genauen Syntax helfen?

Mohanjot
quelle
2
Siehe auch So erstellen Sie ein selbstsigniertes Zertifikat mit openssl? Es enthält die Informationen zum Erstellen eines Zertifikats mit dem alternativen Betreffnamen sowie weitere Regeln, die gelten, damit das Zertifikat mit Browsern und anderen Benutzeragenten die größten Erfolgschancen hat.
JWW
Wenn Sie am Ende dieses Threads ( stackoverflow.com/questions/27294589/… ) mit certificatetools.com antworten , erhalten Sie ein gutes Ergebnis und eine verwendbare cnf-Datei
James Nelson

Antworten:

164

Kann mir jemand mit der genauen Syntax helfen?

Es ist ein dreistufiger Prozess, bei dem die openssl.cnfDatei geändert wird. Möglicherweise können Sie dies nur mit Befehlszeilenoptionen tun, aber ich mache es nicht so.

Finden Sie Ihre openssl.cnfDatei. Es befindet sich wahrscheinlich in /usr/lib/ssl/openssl.cnf:

$ find /usr/lib -name openssl.cnf
/usr/lib/openssl.cnf
/usr/lib/openssh/openssl.cnf
/usr/lib/ssl/openssl.cnf

Wird auf meinem Debian- System /usr/lib/ssl/openssl.cnfvom eingebauten opensslProgramm verwendet. Auf neueren Debian-Systemen befindet es sich unter/etc/ssl/openssl.cnf

Sie können bestimmen, welche openssl.cnfverwendet wird, indem Sie XXXder Datei einen Fehler hinzufügen und prüfen, ob opensslDrosseln vorhanden sind.


Ändern Sie zunächst die reqParameter. Fügen Sie einen alternate_namesAbschnitt openssl.cnfmit den Namen hinzu, die Sie verwenden möchten. Es sind keine alternate_namesAbschnitte vorhanden , daher spielt es keine Rolle, wo Sie sie hinzufügen.

[ alternate_names ]

DNS.1        = example.com
DNS.2        = www.example.com
DNS.3        = mail.example.com
DNS.4        = ftp.example.com

Fügen Sie als Nächstes dem vorhandenen [ v3_ca ] Abschnitt Folgendes hinzu . Suchen Sie nach der genauen Zeichenfolge [ v3_ca ]:

subjectAltName      = @alternate_names

Sie können keyUsageunter folgendem Folgendes ändern [ v3_ca ]:

keyUsage = digitalSignature, keyEncipherment

digitalSignatureund keyEnciphermentsind Standardtarif für ein Serverzertifikat. Mach dir keine Sorgen nonRepudiation. Es ist ein nutzloses Stück, das sich Leute aus der Informatik ausgedacht haben, die Anwälte werden wollten. Es bedeutet nichts in der Rechtswelt.

Am Ende laufen die IETF ( RFC 5280 ), Browser und Zertifizierungsstellen schnell und locker, sodass es wahrscheinlich keine Rolle spielt, welche Schlüsselverwendung Sie bereitstellen.


Zweitens ändern Sie die Signaturparameter. Finden Sie diese Zeile unter dem CA_defaultAbschnitt:

# Extension copying option: use with caution.
# copy_extensions = copy

Und ändern Sie es in:

# Extension copying option: use with caution.
copy_extensions = copy

Dadurch wird sichergestellt, dass die SANs in das Zertifikat kopiert werden. Die anderen Möglichkeiten zum Kopieren der DNS-Namen sind fehlerhaft.


Drittens generieren Sie Ihr selbstsigniertes Zertifikat:

$ openssl genrsa -out private.key 3072
$ openssl req -new -x509 -key private.key -sha256 -out certificate.pem -days 730
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
...

Überprüfen Sie abschließend das Zertifikat:

$ openssl x509 -in certificate.pem -text -noout
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 9647297427330319047 (0x85e215e5869042c7)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=US, ST=MD, L=Baltimore, O=Test CA, Limited, CN=Test CA/[email protected]
        Validity
            Not Before: Feb  1 05:23:05 2014 GMT
            Not After : Feb  1 05:23:05 2016 GMT
        Subject: C=US, ST=MD, L=Baltimore, O=Test CA, Limited, CN=Test CA/[email protected]
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (3072 bit)
                Modulus:
                    00:e2:e9:0e:9a:b8:52:d4:91:cf:ed:33:53:8e:35:
                    ...
                    d6:7d:ed:67:44:c3:65:38:5d:6c:94:e5:98:ab:8c:
                    72:1c:45:92:2c:88:a9:be:0b:f9
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                34:66:39:7C:EC:8B:70:80:9E:6F:95:89:DB:B5:B9:B8:D8:F8:AF:A4
            X509v3 Authority Key Identifier:
                keyid:34:66:39:7C:EC:8B:70:80:9E:6F:95:89:DB:B5:B9:B8:D8:F8:AF:A4

            X509v3 Basic Constraints: critical
                CA:FALSE
            X509v3 Key Usage:
                Digital Signature, Non Repudiation, Key Encipherment, Certificate Sign
            X509v3 Subject Alternative Name:
                DNS:example.com, DNS:www.example.com, DNS:mail.example.com, DNS:ftp.example.com
    Signature Algorithm: sha256WithRSAEncryption
         3b:28:fc:e3:b5:43:5a:d2:a0:b8:01:9b:fa:26:47:8e:5c:b7:
         ...
         71:21:b9:1f:fa:30:19:8b:be:d2:19:5a:84:6c:81:82:95:ef:
         8b:0a:bd:65:03:d1
jww
quelle
7
Ich habe gerade diese openssl-Datei kopiert und lokal angepasst. Dann generierte alles mit: openssl genrsa -out cert.key 3072 -nodes openssl req -new -x509 -key cert.key -sha256 -config openssl.cnf -out cert.crt -days 730 -subj "/C=US/ST=private/L=province/O=city/CN=hostname.example.com"
stwienert
7
Es gibt auch einen schönen Trick, um dies mithilfe der hier beschriebenen Umgebungsvariablen flexibler zu gestalten : subjectAltName=$ENV::ALTNAME(und setzen Sie die Umgebung var. ALTNAME=DNS:example.com,DNS:other.example.net).
Bruno
5
Beachten Sie, dass Sie IPanstelle von DNSfor verwenden, alternate_nameswenn Sie mit einer IP-Adresse arbeiten. Sie können die Konfigurationsdatei auch lokal kopieren und dann in der openssl-Befehlszeile mit angeben -config my_config.cnf. Und Sie müssen möglicherweise auskommentieren req_extensions = v3_req.
Adversus
5
Ich habe dies unter OSX nie zum Laufen gebracht, aber die Verwendung der Vorlage req.conf unter diesem Link hat wie ein Zauber funktioniert: support.citrix.com/article/CTX135602 (Ich würde die Details in eine Antwort extrahieren, aber diese Frage wurde nicht hilfreich geschlossen )
Rymo
3
Aus irgendeinem Grund mag es den subjectAltName = @alternate_names im Abschnitt v3_ca nicht. Könnte es ein Tippfehler sein? Hier ist der Fehler, den ich erhalte: Fehler: 22097069: X509 V3-Routinen: DO_EXT_NCONF: Ungültige Erweiterungszeichenfolge: v3_conf.c: 139: name = subjectAltName, section = @ alternative_names 140487468840608: Fehler: 22098080: X509 V3-Routinen: X509V3_EXT_nconf: v3_conf.c: 93: name = subjectAltName, value = @ alternative_names
James Nelson