OpenSSL Tutorial

Updated on 2026-05-22 by lf

Dieses Tutorial ist eine Schritt-für-Schritt-Anleitung um eine rudimentäre Certification Authority mit OpenSSL aufzusetzen und zu betreiben. Diese Anleitung bietet lediglich einen ersten technischen Einstieg und ist nicht ausreichend um die komplexen rechtlichen und sicherheitstechnischen Probleme zu lösen, die beim Betrieb einer CA auftreten.

Die Anleitung führt in das Kommandozeileninterface von OpenSSL ein.

Installation

Installiert openssl. Auf einem Debian-artigen System ist dafür das folgende Kommando aussreichend:

apt-get -y install openssl

Für eine Installation aus den Quellen verweise ich auf die releases

Datenstruktur

Legt ein Unterverzeichnis ca in einem Nutzerverzeichnis oder unter /usr/local/var an. Alle folgenden Operationen finden innerhalb dieses Verzeichnisses statt. Grundsätzlich wollt ihr natürlich einen eigenen Nutzer, oder zumindest eine Gruppe für die CA anlegen.

Eure CA benötigt vier Unterverzeichnisse im Verzeichnis ca:

  • certs: Verzeichnis aller erzeugten Zertifikate (Endung “.crt”)
  • crl: Für die Certificate Revocation List (CRL).
  • newcerts: Nur für openssl intern
  • private: Enthält alle privaten Schlüssel. Leserechte für dieses Verzeichnis sollten minimal sein, also z.B. nur für den Account der die CA betreibt lesbar sein. Private Schlüssel haben die Endung “.key

Legt jetzt noch eine leere Datei index.txt an, in der OpenSSL ein Verzeichnis der ausgestellten Zertifikate führt. Und schreibt in eine Datei serial die initiale Seriennummer für ausgestellte Zertifikate als ASCII-codierte Dezimalzahl. (Zum Beispiel mittels echo "1000") Die initiale Seriennummer soll nicht kleiner als 1000 sein.

Kopiert euch die Standard-Konfiguration in das Verzeichnis der CA, z.B.:

cp /etc/ssl/openssl.cnf <Pfad zum Verzeichnis ca>

In dieser Datei müsst ihr im Abschnitt CA_default die Parameter dir, certificate und private_key anpassen.

  • dir: muss auf den Pfad zum CA-Verzeichnis ca gesetzt werden.
  • certificate: enthält den Pfad des CA-Zertifikats
  • private_key: setzt ihr auf den Pfad des privaten Schlüssels

CA-Zertifikat

Zuerst müsst Ihr euer Root-Zertifikat erzeugen. Wählt dabei passende Namen für die Beschreibung des Subjects; Staat, Bundesland und Ortsname. Als Organisation tragt ihr “SecLab HBv” und als Abteilung (Unit), z.B. “IT-Sicherheit 2026” ein. Als Common Name wählt ihr wieder euren Teamnamen. Gebt eine gültige Emailadresse eines Gruppenmitglieds an.

openssl req -config openssl.cnf -new -x509 -days 120 -extensions v3_ca -keyout private/ca.key -out certs/ca.crt

Welche Dateien wurden erzeugt und was ist die Funktion der enthaltenen Schlüssel? Ansonsten müsste eure CA jetzt einsatzbereit sein. Den öffentlichen Schlüssel der CA müsstet ihr jetzt natürlich noch veröffentlichen.

Umgang mit Zertifikaten

Zertifikate generieren

Generiert, zum Beispiel für jedes Mitglied eines Teams, eine Zertifikatsanfrage. Zumindest der private Schlüssel zu einer Zertifikatsanfrage sollte von der Eigentümerin selbst erzeugt werden und nicht, z.B., auf dem Zertifikatsserver. Die folgende Zeile erzeugt Zertifikatsanfrage und privaten Schlüssel in einem Rutsch. Für ein Zertifikat zur Nutzung mit S/MIME sollte die Anfrage den echten Namen im Common Name und die Emailadresse enthalten.

openssl req -config openssl.cnf -new -nodes -days 365 -keyout <private keyfile> -out <certificate request file>

Ein sprechender Name für die Datei in der die Anfrage und der Schlüssel gespeichert werden ist hilfreich. Erfahrungsgemäß entehen nach und nach viele Zertifikate für unterschiedliche Identitäten für unterschiedliche Anwendungszwecke. Grundsätzlich sollten, wie bei Passworten, für jeden Dienst eigene Credentials verwendet werden.

Zertifikatsanfrage bearbeiten

Eine Zertifikatsanfrage (CSR), z.B. “first.csr”, muss von einer CA signiert und damit ein Zertifikat erzeugt werden. Die CA muss insbesondere die Richtigkeit aller im CSR enthaltene Attribute prüfen. Fehlerhafte Attribute müssen entweder korrigiert werden, wenn das, wie beim Gültigkeitsdatum des Zertifikats unkritisch ist. Oder, wenn wichtige Angaben falsch sind, muss die Ausstellung eines Zertifikats verweigert werden.

Um die Zertifikatsanfrage einzusehen:

openssl req -text < first.csr

Um ein Zertifikat zu erstellen:

openssl ca -config openssl.cnf -policy policy_anything -out certs/test.crt -infiles <Certificate Request File>

Welche Dateien sind entstanden?

Mit dieser Zeile lässt sich ein erstelltes Zertifikat noch einmal ansehhen.

openssl x509 -noout -text -in <CERTFILE>

Was sind die Unterschiede zwischen dem Zertifikat der CA und dem Zertifikat welches eben erstellt wurde?