OpenSSL verwenden

OpenSSL ist ein sehr mächtiges und komplexes Werkzeug. Diese Seite beschreibt nur einzelne Situationen, in denen diese Software beim Beantragen und Verwenden von Zertifikaten helfen kann.

Auf Linux- und Macintosh-Rechnern sollte die OpenSSL-Software immer installiert sein. Besitzer von Windows-Rechnern können die Software von www.openssl.org herunterladen und installieren.

OpenSSL besitzt keine grafische Oberfläche, sondern wird durch Eintippen von Befehlen bedient.

Diese Anleitung beschreibt verschiedene Szenarien:

Alle OpenSSL-Befehle verstehen die Option -help und zeigen dann eine kurze Hilfe an.

Schlüsselpaar und Zertifikatantrag erzeugen

Um einen Zertifikatantrag zu erzeugen, erstellen Sie bitte zuerst mit einem einfachen Texteditor die folgende Konfigurationsdatei xxx.cnf, wobei Sie die Angaben in den Zeilen „organizationalUnitName_default“ und “emailAddress_default” durchaus schon anpassen oder die Schlüsselgröße auf bis zu 4096 Bits erhöhen können:

[ req ]
default_bits                   = 2048
default_keyfile                = private.pem
distinguished_name             = req_dn
[ req_dn ]
countryName                    = Country Code
countryName_value              = DE
stateOrProvinceName            = State or Province
stateOrProvinceName_value      = Nordrhein-Westfalen
localityName                   = Locality
localityName_value             = Muenster
organizationName               = Organization Name
organizationName_value         = Westfaelische Wilhelms-Universitaet Muenster
organizationalUnitName         = Organizational Unit Name (eg, section)
organizationalUnitName_max     = 64
organizationalUnitName_default = Institut fuer Physikalische Theologie
commonName                     = Server Name (eg, www.uni-muenster.de)
commonName_min                 = 6
commonName_max                 = 64
commonName_default             = xxx.uni-muenster.de
emailAddress                   = Email Address
emailAddress_max               = 64
emailAddress_default           = xxx@uni-muenster.de

Um ein 2048-Bit-RSA-Schlüsselpaar zu erzeugen, können Sie folgenden Befehl verwenden:

openssl genrsa -out xxx.key

Bei diesem Befehl wird der private Schlüssel ungeschützt in die Datei xxx.key geschrieben. Wenn Sie den privaten Schlüssel mit einem Passwort verschlüsselt ablegen möchten, können Sie stattdessen folgenden Befehl verwenden:

openssl genrsa -des3 -out xxx.key

(Die Triple-DES-Verschlüsselung ist alt, aber portabel und für diesen Zweck mehr als sicher genug.)

Bitte beachten Sie: Falls Sie einen verschlüsselten privaten Schlüssel für einen Server verwenden, werden Sie bei jedem Starten des Servers das Schlüsselpasswort eintippen müssen.

Um für ein vorhandenes Schlüsselpaar mit dem privaten Schlüssel in xxx.key einen Zertifikatantrag xxx.req zu erzeugen, können Sie dann folgenden Befehl verwenden:

openssl req -config xxx.cnf -new -key xxx.key -out xxx.req

Falls der private Schlüssel verschlüsselt gespeichert wurde, werden Sie nach dem Passwort gefragt.

Um zugleich ein neues Schlüsselpaar mit dem privaten Schlüssel in xxx.key und einen Zertifikatantrag xxx.req für dieses Schlüsselpaar zu erzeugen, können Sie folgenden Befehl verwenden:

openssl req -config xxx.cnf -new -nodes -keyout xxx.key -out xxx.req

Oder ohne eigene Konfigurationsdatei:

openssl req -new -newkey rsa:2048 -nodes -keyout xxx.key -out xxx.req

Um den privaten Schlüssel Triple-DES-verschlüsselt abzuspeichern, lassen Sie bitte die Option -nodes weg.

Digitale ID (PKCS#12-Datei) zusammenbauen

Eine vollständige digitale ID enthält folgende Bestandteile:

  1. den privaten Schlüssel

    Dieser kann der obigen Datei xxx.key entnommen werden.

  2. das zugehörige Zertifikat mit dem öffentlichen Schlüssel

    Dieses wird von der Zertifizierungsstelle als Anlage der E-Mail verschickt und kann als xxx.crt abgespeichert werden.

  3. den Zertifikaten der Zwischenzertifizierungsstellen

    Diese finden Sie entweder über den entsprechenden Link in dieser E-Mail oder einfacher auf der Seite CA-Zertifikate in der Tabellenspalte „X.509-Kette“. Sie können die Datei „Text (ohne Wurzel)“ als xxx.chain abspeichern.

Um diese Teile zu einer PKCS#12-Datei zusammenzubauen, verwenden Sie bitte den folgenden Befehl (alles in einer Zeile eintippen):

openssl pkcs12 -export
  -inkey xxx.key
  -in xxx.crt
  -certfile xxx.chain
  -name "Neue digitale ID"
  -out xxx.p12

Anstelle von Neue digitale ID sollten Sie Name und Datum oder ähnliche Angaben machen. Viele Programme zeigen diese Bezeichnung in der Liste der digitalen IDs an.

Eine PKCS#12-Datei wird immer mit einem Passwort verschlüsselt. Daher werden Sie sowohl nach dem Passwort des privaten Schlüssels als auch zweimal nach dem neuen Passwort für die digitale ID gefragt.

Falls Sie nicht sicher sind, welche Zwischenzertifikate Sie benötigen, können Sie diese auch automatisch heraussuchen lassen. Speichern Sie dazu diese Datei als all-ca.pem ab und benutzen Sie folgenden Befehl (alles in einer Zeile eintippen):

openssl pkcs12 -export
  -inkey xxx.key
  -in xxx.crt
  -chain -CAfile all-ca.pem
  -name "Neue digitale ID"
  -out xxx.p12

Digitale ID (PKCS#12-Datei) zerlegen

Um eine PKCS#12-Datei zu zerlegen, verwenden Sie bitte den folgenden Befehl (alles in einer Zeile eintippen):

openssl pkcs12
  -in xxx.p12
  -out xxx.pem

Um nur einzelne Teile zu extrahieren und diese in einzelne Dateien abzuspeichern, können Sie zusätzliche Optionen angeben:

  • Nur der private Schlüssel:

    openssl pkcs12
      -in xxx.p12
      -nocerts
      -out xxx.key

  • Nur das eigene Zertifikat:

    openssl pkcs12
      -in xxx.p12
      -nokeys -clcerts
      -out xxx.crt

  • Nur die Zertifikate der Zwischenzertifizierungsstellen:

    openssl pkcs12
      -in xxx.p12
      -nokeys -cacerts
      -out xxx.chain

Sie werden jeweils nach dem Passwort für die digitale ID und, falls der private Schlüssel ausgegeben wird, zweimal nach einem neuen Passwort zum Verschlüsseln des privaten Schlüssels in der PEM-Datei gefragt.

Privaten Schlüssel in verschiedenen Formaten speichern

Verschiedene Software benötigt den privaten Schlüssel möglicherweise in unterschiedlichen Formaten:

Unverschlüsselte DER-Datei:

openssl rsa
  -inform pem -in xxx.key
  -outform der -out yyy.der

Unverschlüsselte PEM-Datei:

openssl rsa
  -inform pem -in xxx.key
  -outform pem -out yyy.pem

Verschlüsselte PEM-Datei:

openssl rsa
  -inform pem -in xxx.key
  -aes256
  -outform pem -out yyy.pem

Verschlüsselte PEM-Datei im PKCS#8-Format:

openssl pkcs8
  -inform pem -in xxx.key
  -topk8
  -outform pem -out yyy.pem

Zertifikate in verschiedenen Formaten speichern

Verschiedene Software benötigt das Zertifikat möglicherweise in unterschiedlichen Formaten:

Unverschlüsselte DER-Datei (kann nur ein Zertifikat enthalten, nicht mehrere):

openssl x509
  -inform pem -in xxx.crt
  -outform der -out yyy.der

Für PKCS#12-Dateien siehe oben.

Den Inhalt eines Zertifikats kann man sich so anzeigen lassen:

openssl x509
  -inform pem -in xxx.crt
  -text
  -noout

Unverschlüsselte PKCS#7-Datei (kann mehrere Zertifikate enthalten):

openssl crl2pkcs7 -nocrl -outform DER
  -certfile xxx.crt
  -out yyy.p7b

Die PEM-Datei xxx.crt darf mehrere Zertifikate enthalten und die Option -certfile xxx.crt darf mehrmals angegeben werden. Oft wird so eine ganze Zertifikatkette inklusive Wurzelzertifikat zu einer Datei zusammengefasst.

TLS-Verbindung und vom Server präsentierte Zertifikate prüfen

openssl s_client
  -connect hostname.domain:portnumber
  -showcerts

Bei Verbindungen, die mit STARTTLS arbeiten, muss das entsprechende Protokoll angegeben werden, beispielsweise für einen SMTP-Server:

openssl s_client
  -connect mailhostname.domain:portnumber
  -starttls smtp
  -showcerts