SSL Zertifikate

Dies ist eine kurze Anleitung zum Erstellen von SSL-Zertifikaten, insbesondere selbst-signierten Zertifikaten zum Betrieb von privaten Webservern.

Server key und sign-request erzeugen

Einen Server key und den dazugehörigen signing-request erstellt man so:
openssl genrsa -des3 -out server.key 4096 openssl req -new -key server.key -out server.csr
Die Angaben kann man beinahe nach Belieben eintragen, ausser bei common name (CN) muss zwingend der DNS Name des Servers eingetragen werden.

Passwort vom Server key entfernen

Um zu verhindern, dass der Webserver (Apache etc) beim starten jeweils nach dem Schlüsselpasswort fragt, bietet es sich an, dieses zu entfernen:
openssl rsa -in server.key -out server.key.nopass chown 0.0 server.key.nopass chmod 400 server.key.nopass
Achtung, wenn die Schlüsseldatei ohne Passwort entwendet wird, können Fremde sich als die jeweilige Website ausgeben (phishing)!

Variante 1: Selbstsignierten Schlüssel erzeugen (z.B. zum Testen)

Diese Variante ist sinnvoll, wenn man einen Serverkey nur kurzfristig zum Testen benötigt, oder eine SSL Verbindung ohne Überprüfung der Serveridendität benötigt wird.
Der Serverkey wird mit einer Gültigkeit von 1 Jahr selbst signiert:
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Variante 2: Schlüssel mit eigener CA signieren

Diese Variante macht vor allem Sinn, wenn in einem lokalen Netzwerk mehrere Server mit SSL Zertifikaten versehen werden sollen und/oder mehrere Clients langfristig auf diese(n) Server zugreifen sollen ohne ständig Warnmeldungen zu erhalten.
Es wird einmalig eine eigene Zertifizierungsstelle (CA) angelegt, deren (längerfristig gültiges) Zertifikat auf allen Clients installiert wird und mit deren Schlüssel dann alle Serverkeys signiert werden.
Einen eigenen, selbst signierten CA Schlüssel mit 10 Jahre gültigem Zertifikat erstellen (einmalig, bis Zertifikat abläuft):
openssl genrsa -des3 -out ca.key 4096 openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
Hinweis: Als CN darf hier kein Name angegeben werden, der mit einem späteren Servernamen (DNS) übereinstimmt.
Dann wird der Serverkey mit dem CA key signiert:
openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt

Zertifikate installieren

Der Webserver benötigt jeweils sein Zertifikat (*.crt) und den zugehörigen Schlüssel (*.key).
Falls das CA Zertifikat auf die Clients verteilt werden soll, kann man es einfach irgendwo auf die Webseite installieren und dann per Browser den passenden URL aufrufen.

Besonderheiten bei lighttpd

lighttpd erwartet das Zertifikat und den dazugehörigen Schlüssel in einer Datei, und zwar erst den Schlüssel und dann das Zertifikat. Kein Problem:
cat server.key.nopass server.crt > /etc/lighttpd/server.pem

Sonstiges

Es lohnt sich, mal einen Blick auf letsencrypt.org zu werfen. Während ich diese Seite erstellt habe (Ende 2014) gab es dort zwar noch nichts funktionierendes, aber sehr vielversprechende Pläne!