Erstellen und Nutzen von persönlichen Hochschulzertifikaten

Posted on 2023-12-06 by lf

Dieses Tutorial fasst die wesentlichen Kommandos zur Nutzung von openssl zur Erstellung von x509/SMIME-Schlüsseln und Zertifikaten zur Nutzung in Browser,Webservern und Email-Sicherheit dar. Dieses Tutorial soll — darüber hinaus — eine Hilfestellung für Kollegen der Hochschule Bremerhaven zur Erzeugung und Nutzung von persönlichen Zertifikaten, z.B. zur Absicherung von Emails, sein.

Grundlagen

Zertifikat:
Signierte Aussage mit der eine Identität bestätigt und mit der Halterin der Identität verknüpft wird. Letzteres geschieht über die Angabe eines öffentlichen Schlüssels der im Besitz der Halterin ist. In einem Zertifikat enthalten sind üblicherweise Identitätsangaben, Email-Adresse, Aussteller- und Gültigkeitsinformationen, öffentlicher Schlüssel und eine Signatur des Ausstellers.
Öffentlicher Schlüssel:
Gegenstück zu einem privaten Schlüssel. Damit lassen sich Nachrichten verschlüsseln, die nur durch den passenden privaten Schlüssel wieder sichtbar gemacht werden können, oder Signaturen überprüfen die mit dem dazugehörigen privaten Schlüssel hergestellt wurden.
Privater Schlüssel:
Gegenstück zu einem öffentlichen Schlüssel. Damit lassen sich die Nachrichten entschlüsseln, welche mit dem passenden öffentlichen Schlüssel gemacht wurden. Mit dem privaten Schlüssel lassen sich ausserdem Signaturen auf digitalen Dokumenten erstellen, welche durch den passenden öffentlichen Schlüssel überprüft werden können.

Die Operationen von öffentlichen und privaten Schlüssel sind sehr kurzweilig in den IDEA-instructions dargestellt.

Zertifikate erstellen

Um ein Zertifikat zu erhalten muss zunächst eine Zertifikatsanfrage (Certificate Signing Request, CSR) erstellt werden. Dieser wird dann von einer Certification Authority (CA) in ein Zertifikat umgewandelt und dabei signiert. Mit der Signatur bestätigt die CA die im Zertifikat angegebene Identität — und hat idealerweise auch den Besitz des zugehörigen privaten Schlüssels überprüft.

Für Angehörige der Hochschule Bremerhaven wird die Zertifikatserstellung hier erklärt. (Stand 2023-12-06, nur aus dem Intranet) Die Erzeugung dort erfolgt etweder auf dem Server der CA, was dann allerdings bedeutet, dass die ausstellende Stelle potentiell den privaten Schlüssel kennen kann, oder über einen selbsterstellten Certificate Signing Request. Wer ein Zertifikat direkt erstellen lässt kann weiter unten weiterlesen. Der nächste Abschnitt erläutert die Erzeugung eines Certificate Signing Request.

Certificate Signing Request (CSR)

Ein Certificate Signing Request (CSR) stellt ein digitales Formular zur Beantragung eines Zertifikates bei einer Zertifizierungsstelle (CA) dar. In einem Zug lassen sich ein CSR und der dazu passende private Schlüssel erzeugen:

openssl req -new -nodes -days 730 -keyout ~/certs/lafischer.key.p8 -out ~/certs/lafischer.csr.pem -newkey rsa:4096

Die Nutzung einer sicheren Passphrase für den privaten Schlüssel verhindert, dass dieser später “aus Versehen” veröffentlicht wird. Ansonsten muss man wenig Sorgen haben, hier schon falsche Informationen einzubringen. Die signierende Stelle wird, in der Regel, die Felder nicht nur überprüfen, sondern ggF. entsprechend anpassen.

Das Ergebnis der Erzeugung lässt sich noch einmal überprüfen, bevor es an die Zertifizierungsstelle übermittelt wird.

Zertifikatsanfrage (CSR) ansehen:

openssl req -text < lafischer.csr.pem

Elliptic Curves

If you want to generate a CSR for elliptic curves, you cannot do this directly. You have to create a parameter file first. You do this using genpkey. I have chosen curve secp384r1 because it is suitable for the CA used by University of Applied Sciences Bremerhaven. (brainpool curves have not been supported as of 2023-12-12.)

You can retrieve a list of all curves supported by openssl with the command:

openssl ecparam -list_curves

Be aware that the parameter -genparam has to be set before all other parameters.

openssl genpkey -genparam -algorithm EC -out param.pem  \
                -pkeyopt ec_paramgen_curve:secp384r1 \
                -pkeyopt ec_param_enc:named_curve

Afterwards a CSR can be build using req with the small addition, that you have to provide the parameter-file

openssl req -new -nodes -days 730 \
            -keyout fischer.key \
            -out fischer.csr \
            -newkey param:param.pem

PKCS12-Struktur erstellen

Wer eine eigene Zertifikatsanfrage mittels eines Certificate Signing Request@nbsp;(CSR) gestellt hat, erhält üblicherweise ein Zertifikat als PKCS6-Struktur zurück. Oftmals hat diese Datei die Endung `.pem. PEM steht hierbei für Privacy-Enhanced Mail und bietet in diesem Kontext eine ASCII-basierte Kodierung, die aus lesbaren Buchstaben besteht. Das Gegenstück wäre eine binäre Kodierung, die sich aber nicht problemfrei in Textnachrichten nutzen lässt.

Um das Zertifikat, zum Beispiel im Thunderbird, nutzen zu können muss es zusammen mit dem privaten Schlüssel importiert werden. Dafür möchten viele Anwendungsprogramme, zum Beispiel der Thunderbird, eine PKCS12-Struktur haben, in welcher privater Schlüssel und Zertifikate gemeinsam abgelegt sind.

Gehen wir davon aus, dass wir ein Zertifikat in der Datei lafischer.p6.pem abgelegt haben und unser privater Schlüssel in der Datei lafischer.key.p8 abgelegt ist. Dann erzeugen wir eine PKCS12-Struktur in einer Datei lafischer.p12 mittels openssl

openssl pkcs12 -export -in lafischer.p6.pem -inkey lafischer.key.p8 > lafischer.p12

GgF. muss hier noch die Passphrase des privaten Schlüssels eingegeben werden.

Das Ergebnis lässt sich dann noch einmal anschauen (wobei der private Schlüssel nicht mit ausgegeben wird.)

openssl x509 -text < lafischer.p12

Schlüssel und Zertifikate nutzen

Um Zertifikate nutzen zu können müssen diese in der Regel in der Anwendung konfiguriert werden. Im Thunderbird besteht der Prozess zunächst aus dem Import der PKCS12-Struktur in welcher sich Zertifikat und privater Schlüssel befinden. Der nächste Schritt ist dann die Auswahl des Zertifikats für einen bestimmten Account.

to be continued…

So you want to start your CA?

Zertifizierungsstellen (Certification Authorities), kurz CA, signieren Zertifikate und bestätigen damit die Authentizität einer Identität bestehend aus Attributen, wie Name und Emailadresse, und einem öffentlichen Schlüssel. Hier gebe ich eine kurze Anleitung, wie eine CA mittels openssl auf der Kommandozeile entsteht.

Die Beschreibung basiert auf einer Übungsaufgabe im Modul IT-Sicherheit vom Wintersemester 2022.

Ausgangspunkt ist eine handelsübliche Debian-Installation.

Datenstruktur

Legt ein Unterverzeichnis “ca” im Verzeichnis “/root” an. Alle folgenden Operationen finden innerhalb dieses Verzeichnisses statt. (In einem realistischen System wollt ihr einen eigenen Nutzer und eigenen Gruppen für die CA anlegen.)

Eure CA benötigt vier Unterverzeichnisse:

  • 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 nur für den Nutzer. 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 schreiben Sie in eine Datei “serial” die initiale Seriennummer für ausgestellte Zertifikate als ASCII-codierte Dezimalzahl. (Zum Beispiel mittels echo "1000")

Kopiert euch die Standard-Konfiguration in das Verzeichnis der CA:

cp /etc/ssl/openssl.cnf /root/ca

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

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

CA-Zertifikate

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) euren Gruppennamen ein. Als Common name wählt ihr wieder euren Gruppennamen. Gebt eine gültige Emailadresse eines Gruppenmitglieds an.

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

Welche Dateien wurden erzeugt und was ist die Funktion der enthaltenen Schlüssel?

Zertifikatsanfrage bearbeiten

Ihr habt eine Zertifikatsanfrage “first.csr” erhalten. Erzeugt ein Zertifikat und signiert dieses als CA. (Wenn Ihr die Konfiguration richtig gesetzt habt, sollte dies automatisch ausgeführt werden.) Erzeugt euch einen passenden CSR wie weiter oben angegeben.

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 <Certific
ate Request File>

Welche Dateien sind entstanden?

openssl x509 -noout -text -in <CERTFILE>

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

Fazit

Damit sind die Funktionen fast vollständig. Eine reale Zertifizierungsstelle hat aber noch weitere Funktionen und Anforderungen zu erfüllen. Diese kleine Einführung reicht dafür nicht,