OpenSSL-Zeichenanforderungen mit Erweiterungen

8

Ich habe eine kleine selbstsignierte Zertifizierungsstelle für meine Entwicklungsumgebung festgelegt. Ich möchte viele verschiedene Serverzertifikate mit unterschiedlichen Eigenschaften erstellen. Mein Ansatz besteht darin, für jeden Server einen bestimmten Erweiterungsabschnitt zu erstellen. Ich habe eine große openssl.cnf, die Abschnitte wie diesen enthält:

[ server0_http ]

nsCertType                      = server
nsComment                       = "HTTP server0"
basicConstraints=CA:FALSE
extendedKeyUsage=serverAuth
subjectAltName=@server0_http_altnames

[ server0_http_altnames ]
URI.1 = https://server.domain.tld
URI.2 = http://server.domain.tld
IP.1  = 1.2.3.4
DNS.1 = server.doamin.tld

Wenn ich dann meine CSR mit erstelle, verwende opensslich die Parameter -config myCustomOpenssl.cnf -reqexts server0_http. Wenn ich meine Anfrage mit benutze openssl req -text -noout -in myrequest.csr, sieht alles perfekt aus.

Nachdem ich die Anfrage unterschrieben habe, sind die Abschnitte "X509v3 Extended Key Usage" und "X509v3 Subject Alternative Name" jedoch nicht mehr vorhanden. Um dieses Problem zu beheben, habe ich auch -extfile myCustomOpenssl.cnf -reqexts server0_httpdie Parameter für den Signaturaufruf an gesetzt openssl.

Ist das das erwartete Verhalten? Ich habe immer gedacht, dass die csr-Datei allein ausreichen muss, um ein Zertifikat wie gewünscht zu erstellen, dh mit all seinen Abschnitten. Mein System funktioniert derzeit so, dass ich ein Zertifikat mit fehlenden Abschnitten erhalte. Um das Zertifikat so zu erhalten, wie ich es möchte, muss ich die csr-Datei und den entsprechenden Abschnitt aus der openssl-Konfigurationsdatei bereitstellen, mit der ich die Anforderung erstellt habe. Dies ist kein Problem für meine kleine Einrichtung, aber dies wird ziemlich chaotisch, wenn ich eine größere Zertifizierungsstelle werde. Soll es so sein oder verwende ich openssl falsch?

Bananguin
quelle

Antworten:

7

Fand es! Was ich beschrieben habe, ist das normale erwartete Verhalten von openssl. Standardmäßig werden benutzerdefinierte Erweiterungen nicht in das Zertifikat kopiert.

Um openssl zu erstellen, kopieren Sie die angeforderten Erweiterungen in das Zertifikat, das Sie copy_extensions = copyfür die Signatur angeben müssen . In Vanille-Installationen bedeutet dies, dass diese Zeile dem Abschnitt default_CAin hinzugefügt werden muss openssl.cnf.

In der openssl.cnfmit (mindestens) Centos gelieferten Zeile ist die Zeile bereits als Kommentar enthalten und trägt die Warnung "Mit Vorsicht verwenden". Anforderer können dies missbrauchen, um ein CA-Zertifikat auszustellen, wenn Sie nicht vorsichtig sind.

Bananguin
quelle