Erstellung eines SSL-Server-Zertifikats

Diesen Beitrag schrieb ich 9 Jahre und 8 Monate zuvor; die nachfolgenden Ausführungen müssen heute weder genau so nach wie vor funktionieren, noch meiner heutigen Meinung entsprechen. Behalte das beim Lesen (und vor allem: beim Nachmachen!) bitte stets im Hinterkopf.

Geschätzte Lesezeit: 1 Minute

Beim Zertifikat hab ich mich für ein self-signed entschieden, aber das ist natürlich Geschmackssache.

Zertifikate von offizieller Stelle sind nicht kostenlos, und Geld will und kann ich dafür nicht ausgeben. Das Problem wird sein, dass die Clients die CA nicht kennen und ich diese erstmal bekannt machen muss – wie das geht, zeige ich. Ich notiere mal, wie ich vorgegangen bin.

  • Ich lege einen Ordner an, in dem mein Zertifikat erstellt werden soll, und bewege mich hinein. Dann erzeuge ich mit einen Schlüssel für mein Zertifikat (Länge 4096 Bit) und setze die Lebensdauer meiner CA mit 10 Jahren bewusst hoch an, denn wird die CA ungültig, werden es auch alle damit verbundenen Zertifikate.
$ mkdir /etc/ssl/my
$ cd /etc/ssl/my
$ openssl req -new -x509 -newkey rsa:4096 -keyout cakey.pem -out cacert.pem -days 3650
  • Das erstellt die beiden Dateien cakey.pem und cacert.pem. Auf ersteren gut aufpassen und deshalb die Rechte entsprechend setzen! Danach baue ich mir einen Schlüssel für mein Serverzertifikat. Eine leere Passphrase ist nicht möglich, deshalb gebe ich eine einfache an, die ich im nächsten Schritt dann wieder entferne – ich will ja nicht bei jedem Starten des Dienstes eine Passphrase eintippen müssen. Auszufüllen sind die für SSL-Zertifikate üblichen Angaben:
$ chmod 600 cakey.pem
$ openssl genrsa -out serverkey.pem -aes128 4096 -days 3650
  • So, und jetzt kann die Passphrase wieder weggeschmissen werden:
$ openssl rsa -in serverkey.pem -out serverkey.pem
  • Jetzt erzeuge ich mir ein CSR (Certificate Signing Request), der von der CA signiert wird; common name ist dabei der (DNS)-Name, unter dem der Host späterhin angesprochen werden soll – in meinem Fall spiller.me. Soll der Dienst unter einer Subdomain laufen, muss diese hier angegeben werden! Das challenge password bleibt leer.
$ openssl req -new -key serverkey.pem -out req.pem -nodes
$ echo 01 > serial
$ touch index.txt
  • Im letzten Schritt wird nun endlich das Zertifikat mit unserer CA signiert:
$ openssl ca -in req.pem -notext -out servercert.pem
Enter pass phrase for ./cakey.pem:

Im weiteren Verlauf benötigen wir nun servercert.pem, serverkey.pem und cacert.pem; cakey.pem wird nicht benötigt und sollte an sicherer Stelle aufbewahrt werden.

Alle Bilder dieser Seite: © Marianne Spiller – Alle Rechte vorbehalten
Hintergrundbild: 644x 305px, Bild genauer anschauen – © Marianne Spiller – Alle Rechte vorbehalten

Eure Gedanken zu „Erstellung eines SSL-Server-Zertifikats“

Ich freue mich über jeden Kommentar, es sei denn, er ist blöd. Deshalb behalte ich mir auch vor, die richtig blöden kurzerhand wieder zu löschen. Die Kommentarfunktion ist über GitHub realisiert, weshalb ihr euch zunächst dort einloggen und „utterances“ bestätigen müsst. Die Kommentare selbst werden im Issue-Tracker und mit dem Label „✨💬✨ comment“ erfasst – jeder Blogartikel ist ein eigenes Issue. Über GitHub könnt ihr eure Kommentare somit jederzeit bearbeiten oder löschen.