Verwechslungsgefahr! TLS (SSL)-Zertifikate unterscheiden sich zu SSH-Zertifikaten. Siehe TLS / SSL

OpenSSL ist ein Kryptographie-Toolkit, welches SSL v2/v3 sowie TLS v1 Netzwerkprotikolle implementiert. Zu dem Toolkit gehört das Kommandozeilentool openssl, welches für folgende Aufgaben benutzt werden kann:

  • private und öffentliche Schlüssel erstellen und verwalten
  • X.509-Zertifikate, CSRs und CRLs erstellen
  • Ver- und Entschlüsselung mit Ciphers
  • SSL/TLS-Client und Servertests
  • Zeitstemplel-Anfragen, Erstellung und Verifikation
openssl command [command_opts] [command_args]

Kommandos

unvollständig, geordnet nach typischer Anwendung:

  • req - PKCS#10: Erstellen von X.509-Zertifizierungsanfragen (Certificate Sign Request / CSR) sowie Zertifikaten
  • genrsa - RSA private keys 
  • rsa - RSA-Schlüssel-Management
  • x509 - X.509 Zertifikatdaten-Management
  • pkcs12 - PKCS#12-Daten-Management

req

Erstellt Zertifizierungsanfragen (CSR) mit zugehörigem Zertifikat (PEM - privater Schlüssel).

Hauptsächlich zur Erstellung und Verarbeitung von Zertifizierungsanfragen im PKCS#10-Format. Kann zusätzlich zum Selbstsignieren von Zertifikaten, z.B. für root-CAs, verwendet werden.

Option BeispielStandardVerwendung
-config filename -config openssl.cnf  alternative Konfigurationsdatei zu der zur Kompilierunszeit angegebenen, bzw. zur Umgebungsvariable OPENSSL_CONF
-new   Erzeugt eine neue Zertifizierungsanfrage (CSR). Der Nutzer wird zur Eingabe weiterer Informationen Aufgefordert. Standardwerte werden der Konfigurationsdatei entnommen. Wird nicht per -key-Option ein privater Schlüssel (das Zertifikat) für die Zertifizierungsanfrage angegeben, so wird automatisch ein neuer RSA-Schlüssel anhand der Angaben der Konfigurationsdatei erzeugt.
-newkey arg-newkey rsa:4096 1024 bit RSA Wird mit -key kein privater Schlüssel angegeben, kann dieser hiermit gleich erzeugt werden. Das wichtigste Argument ist die Angabe der RSA-Bitgröße rsa:<bits>. Für Clients sollte der Wert 2048 und für Server 4096 betragen.
-nodes  Wird ein Zertifikat erstellt, so wird er mit dieser Option nicht verschlüsselt.
-out-out mypage.csr nur Ausgabe auf der KonsoleName der Datei, in welchem der CSR angelegt werden soll.
-key-key mypage.key Wird nicht mit -newkey ein neuer privater RSA-Schlüssel erzeugt, kann ein vorhandener hiermit angegeben werden.
-keyout-keyout mypage.pem privkey.pemDateiname für das neu angelegte Zertifikat. Ansonsten wird der Wert der in Konfigurationsdatei übernommen.
# Anlegen eines 1024 bit RSA-verschlüsselten Zertifikats namens 'privkey.pem'
# mit Ausgabe des CSR auf der Konsole:
openssl req -new

# Anlegen eines 4064 bit RSA-verschlüsselten Zertifikats namens 'ca.key' mit
# CSR namens 'ca.csr'
openssl req -new -newkey rsa:4096 -out ca.csr -keyout ca.key

genrsa

Erstellt RSA private keys

Option BeispielStandardVerwendung
-out-out mypage.keyKonsoleDer auszugebende RSA-Schlüssel
<numbits>2048 512Größe des privaten Schlüssels. Muss das letztes Argument angegeben werden.

rsa

Erstellt aus dem Zertifikat den RSA-Schlüssel.

Verarbeitet RSA-Schlüssel, Hauptsächlich Konsolenausgabe sowie Konvertierung zwischen verschiedenen Fornmaten. Neuere Anwendungen sollten das sicherere PKCS#8-Format mit dem Utility pkcs8 nutzen.

OptionBeispiel StandardVerwendung
-in-in privkey.pemStandardinput Das zu verarbeitende Zertifikat (private Schlüssel). Nutzer wird zur Passworteingabe aufgefordert, falls das Zertifikat verschlüsselt wurde.
-out-out mypage.keyKonsole Der auszugebende RSA-Schlüssel.
# Erzeugt aus dem Zertifikat einen RSA-Schlüssel
openssl rsa -in privkey.pem -out maPage.key
An dieser Stelle steht die Zertifizierungsanfrage (mittels req) sowie der RSA-Schlüssel (mittels rsa) zur Verfügung, welchen man nun durch eine offizielle Stelle zertifizieren lassen kann. Ansonsten bleibt die Selbstzertifizierung (siehe x509).

x509

Zum Anzeigen und Signieren von Zertifikaten.

Eingabe-/ Ausgabeoptionen

OptionBeispielStandardVerwendung
-in-in mypage.csr StandardinputDatei für Eingabe, sonst Standardinput
-out-out mypage.cert Konsole Datei für Ausgabe, sonst Konsole

Anzeigeoptionen

OptionVerwendung
-nooutkeine Ausgabe
-serialSeriennummer des Zertifikates
-subjectAngegebenes Anliegen des Zertifikates
-issuerAngegebener Aussteller des Zertifikates
-emailAngegebene E-Mail-Adresse
-startdateStart der Gültigkeit
-enddateEnde der Gültigkeit
-fingerprintDER-kodierter Digest des Zertifikates

Vertrauensstellungsoptionen

Ein vertrautes Zertifikat ist ein gewöhnliches zertifikat erweitert um Informationen. Beispielsweise die erlaubten und unerlaubten Verwendungszwecke des Zertifikates. In der Zertifizierungskette muss mindestens ein vertrautes Zertifikat vorkommen. Für gewöhnlich ist dies der root-CA selbst, um deren Verwendungsbereich gleich festzulegen.

OptionVerwendung
-trustout Ein vertrautes Zertifikat wird ausgegeben.

Signierungsoptionen

OptionBeispielStandardVerwendung
-signkey filename-signkey mypage.key  Die Eingabedatei wird anhand des übergebenen privaten Schlüssels selbstsigniert. Die Eingabedatei ist:
  • ein Zertifikat: Name des Zertifikats wird als Aussteller genommen. Startdatum ist das aktuelle Datum, Enddatum wie unter der -days-Option angegeben
  • eine Zertifizierungsanfrage: Informationen aus der Zertifikatanfrage werden übernommen.
-days tage-days 36530Anzahl der Tage, die das Zertifikat gültig ist.
-req   Standardmäßig wird als Eingabedatei ein Zertifikat erwartet. Mit dieser Option wird eine Zertifizierungsanfrage erwartet.
-CA filename-CA ca.pem Gibt das CA-Zertifikat an, mit welchem das Ausgabezertifikat signiert werden soll.
-CAkey filename-CAkey ca.key Privater Schlüssel der CA um das Ausgabezertifikat zu signieren. Wird dieser nicht angegeben, so wird der private Schlüssel im CA-Zertifikat erwartet.
-CAserial-CAserial ca.srl Seriennummerndatei der CA. Nach jeder Zertifizierung wird die hexadezimale Seriennummer in der Datei um 1 erhöht.

Praxisbeispiele

Zertifikat und Schlüssel für Apache

Die verwendete Konfigurationsdatei openssl.cnf für OpenSSL befindet sich im Konfigurationsordner von Apache.

Beim Erstelle der Zertifikatanfrage muss der Common Name (eg, YOUR name) unbedingt dem vollständigen Hostnamen der Website (z.B. www.mynet.de) entsprechen.
# Zertifikat und privaten Schlüssel erzeugen
openssl req -config openssl.cnf -new -out mynet.csr
# Zertifikatanfrage 'mynet.csr' und privater Schlüssel 'privkey.pem' erzeugt

# öffentlichen Schlüssel 'mynet.key' erzeugen
openssl rsa -in privkey.pem -out mynet.key

# Zertifikat 'mynet.cert' für öffentlichen Schlüssel erstellen
openssl x509 -in mynet.csr -out mynet.cert -req -signkey mynet.key -days 365
# dieses ist 365 Tage gültig

Public Key Infrastructure

Vorbereitung und CA aufbauen

Schritt 1: Wir legen den Ordner für unsere PKI an. Daraufhin erstellen wir den privaten Schlüssel sowie den Zertifikatrequest für diesen.

mkdir pki && cd pki
openssl req -new -newkey rsa:4096 -nodes -out ca.csr -keyout ca.key

Schritt 3: Wir erstellen ein selbst signiertes Zertifikat für den privaten Schlüssel unserer CA anhand des Requests und halten im letzten Schritt die Seriennummer der CA fest.

openssl x509 -trustout -signkey ca.key -days 365 -req -in ca.csr -out ca.pem
echo "02" > ca.srl

Schlüssel und Zertifikate

Schritt 1: Wir erzeugen einen privaten Schlüssel sowie einen Zertifikatrequest für diesen Schlüssel für unsere Instanz.

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

Schritt 2: Wir erstellen und signieren das Zertifikat für den privaten Schlüssel mit unserer CA.

openssl x509 -CA ca.pem -CAkey ca.key -CAserial ca.srl -req -in service.req -out service.pem -days 365

Optional: Wir verpacken privaten Schlüssel und Zertifikat in einer PKCS#12-Datei:

openssl pkcs12 -export -in service.pem -inkey service.key -out service.p12 -name "service"
Tags:
Erstellt von ThomasS am 2014/07/31 12:53
    
Copyright 2004-2019 XWiki
7.4.5