Hinzufügen einer erweiterten Schlüsselverwendungszeichenfolge beim Generieren eines selbstsignierten Zertifikats mit openssl

10

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 Serverauthentifizierung (1.3.6.1.5.5.7.3.1) hinzufügen, und ich kann im obigen Befehl nicht herausfinden, wie dies zu tun ist.

Ich habe versucht, die openssl-Option -extfile mit einer Datei zu verwenden, die Folgendes enthält:

[= default ]
extendedKeyUsage = 1.3.6.1.5.5.7.3.1

Ich erhalte jedoch die Fehlermeldung, dass die Option -extfile nicht gefunden wurde.

Joshu
quelle
1
(CLI) openssl-Konfigurationsdateien haben mich überzeugt, dass es einfacher ist, Code zu schreiben, um die gewünschten Zertifikate zu generieren. Ich habe Golang verwendet, aber ich denke, Sie könnten die openssl-Klippe verwenden.
Rhythmic Fistman

Antworten:

9

Während openssl x509Anwendungen -extfileder Befehl Sie verwenden, openssl reqbenötigt, um -configdie Konfigurationsdatei angeben.

Sie können also einen Befehl wie den folgenden 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 Eingabeaufforderungen für die definierten Namensbits sind in der Standardkonfigurationsdatei (wahrscheinlich /System/Library/OpenSSL/openssl.cnfunter OS X) definiert. Diese Datei wird jedoch bei der Verwendung nicht verarbeitet -config, sodass Ihre Konfigurationsdatei auch einige DN-Bits enthalten muss. Daher cert_configkönnte das oben genannte ungefähr 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 = [email protected]
                  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 benötigen Sie meines Erachtens lediglich einen CN, der Ihrem Hostnamen entspricht.


Der Abschnitt Distinguished Name and Attribute 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), welche anderen Bits Sie in Erweiterungsabschnitten angeben können.

Chris Johnsen
quelle
1
Wenn Sie nur eine CSR mit dieser Befehlszeile generieren, fordern Sie mit -reqexts 'my server exts' an, dass die Zertifizierungsstelle später ein Zertifikat mit der erweiterten Schlüsselverwendung für die Serverauthentifizierung generiert.
Memetech