Frage Wie Sie die erweiterte Schlüsselverwendungszeichenfolge hinzufügen, wenn Sie ein selbstsigniertes Zertifikat mit openssl generieren


Ich verwende openssl unter Mac OS X 10.9, um ein selbstsigniertes Zertifikat für Windows Server Remotedesktopdienste zu generieren.

Mit dem folgenden Befehl kann ich das Zertifikat generieren,

   openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout myserver.key -out myserver.crt

Ich muss jedoch eine erweiterte Schlüsselverwendungszeichenfolge hinzufügen Server-Authentifizierung (1.3.6.1.5.5.7.3.1) und ich kann nicht herausfinden, wie man es im obigen Befehl macht.

Ich habe versucht, die openssl Option zu verwenden -extdatei mit einer Datei, die das enthält,

[= default ]
extendedKeyUsage = 1.3.6.1.5.5.7.3.1

Ich bekomme jedoch einen Fehler, dass "-extfile Option nicht gefunden wird"


8
2018-02-03 20:02


Ursprung


(CLI) openssl config files hat mich davon überzeugt, dass es einfacher war, Code zu schreiben, um die gewünschten Zertifikate zu generieren. Ich habe Golang benutzt, aber ich denke du könntest den Openssl Clib benutzen. - Rhythmic Fistman


Antworten:


Während openssl x509 Verwendet -extfile, der Befehl, den Sie verwenden, openssl reqBedürfnisse -config um die Konfigurationsdatei anzugeben.

Also könnten Sie einen Befehl wie folgt verwenden:

openssl req -x509 -config cert_config -extensions 'my server exts' -nodes \
            -days 365 -newkey rsa:4096 -keyout myserver.key -out myserver.crt

Die üblichen Aufforderungen für die Distinguished Name Bits sind in der Standardkonfigurationsdatei definiert (was wahrscheinlich ist /System/Library/OpenSSL/openssl.cnf unter OS X), aber diese Datei wird bei der Verwendung nicht verarbeitet -configDaher muss Ihre Konfigurationsdatei auch einige DN-Bits enthalten. So, die oben genannten cert_config könnte etwa so aussehen:

[ req ]
prompt             = no
distinguished_name = my dn

[ my dn ]
# The bare minimum is probably a commonName
            commonName = secure.example.com
           countryName = XX
          localityName = Fun Land
      organizationName = MyCo LLC LTD INC (d.b.a. OurCo)
organizationalUnitName = SSL Dept.
   stateOrProvinceName = YY
          emailAddress = ssl-admin@example.com
                  name = John Doe
               surname = Doe
             givenName = John
              initials = JXD
           dnQualifier = some

[ my server exts ]
extendedKeyUsage = 1.3.6.1.5.5.7.3.1
# 1.3.6.1.5.5.7.3.1 can also be spelled serverAuth:
# extendedKeyUsage = serverAuth

# see x509v3_config for other extensions

Wie im Kommentar angegeben, können Sie wahrscheinlich die meisten DN-Felder weglassen. Für die Verwendung von HTTPS denke ich, dass Sie nur einen CN benötigen, der Ihrem Hostnamen entspricht.


Das Abschnitt "Distinguished Name" und "Attribut Section Format" von req (1) zeigt, wie Sie die obige Konfiguration ändern können, um nach Werten zu fragen (und Standardwerte anzugeben), wenn Sie mehrere ähnliche Zertifikate / Anforderungen generieren möchten.

Wenn Sie andere Zertifikatserweiterungen benötigen, überprüfen Sie x509v3_config (5)  Für welche anderen Bits können Sie in Erweiterungsabschnitten angeben.


7
2018-02-04 09:56



Wenn Sie nur eine CSR mit dieser Befehlszeile generieren, verwenden Sie -reqexts 'my ext', um zu beantragen, dass die CA später ein Zertifikat mit der erweiterten Verwendung des Server-Authentifizierungsschlüssels generiert. - memetech