Ein eigenes SSL-Zertifikat erzeugen und signieren

Ein Zertifikat kann aus vielen Gründen benötigt werden. Ein Grund wäre z.B. eine verschlüsselte Verbindung zwischen Server und Client im Web-Bereich. Hier ist das „Protokoll“ HTTPS sehr weit verbreitet. HTTPS bedeutet quasi nur HTTP mit SSL. Andere Anwendungsbeispiele sind zum Beispiel abgesicherte Mail-Server mit einer SSL/TLS Kommunikation für IMAP, POP3 und SMTP. Und es ist auch gar nicht mal so aufwändig eigene Zertifikate zu erzeugen, um die gesicherte Kommunikation nutzen zu können. Hierbei wird jedoch zwischen selbst erstellten und signierten Zertifikaten und gekauften Zertifkaten unterschieden.

Ich werde hier die Erstellung und Signierung eines eigenen Zertifkates unter Ubuntu 14.04 LTS Server demonstieren. Hierfür müssen wir zunächst, falls nicht bereits vorhanden, openssl installieren.

apt-get install openssl

Nun können wir uns auch schon ein eigenes Zertifikat erzeugen. Alle verwendeten Optionen liest man sich am Besten in der man-Page von openssl durch! Die Dateiendungen verwende ich zur Unterscheidung der Dateitypen, da bei Verwechslung von Key, CSR und signiertem Zertifikat nichts funktionieren wird.

Zu allererst benötigt man einen privaten Schlüssel, der nur auf dem Server gespeichert bleibt und so gut wie möglich vor Diebstahl geschützt werden muss. Diese unterscheiden sich in zwei Typen, mit Passphrase und ohne.

Wer seinen Schlüssel zusätzlich mit einem Passwort versieht, muss darauf achten, dass nicht alle Server-Dienste dies auch unterstützen. lighttpd z.B. verlangt beim Start die Eingabe des Passwortes. Um einen Schlüssel mit einem Passwort zu erstellen, nutzen wir folgenden Befehl:

openssl genrsa -des3 -out example.key 4096

Meist wird man jedoch einen ungeschützen Schlüssel verwenden, da dieser z.B. bei einem Neustart des Servers ohne Passwortabfrage gelesen werden kann. Hier sollten jedoch die Dateirechte entsprechend angepasst werden, damit nur der Root-Benutzer und der Dienst diese Datei lesen kann!

openssl genrsa -out example.key 4096

Um bei einem Passwort geschützten Schlüssel, das Passwort entfernen zu können, verwendet man folgenden Befehl:

openssl rsa -in example.key -out example-unsafe.key

Nun können wir uns ein Certificate Signing Request (CSR) erzeugen. Dies geschieht mir folgendem Befehl:

openssl req -new -key example.key -out example.csr

Anschließend müssen wir unser Zertifikat nur noch signieren. Hierfür gibt es wiederrum zwei Wege. Der erste wäre die Selbstsignierung, d.h. man „unterschreibt“ das Zertifikat selbest. Dies hat aber zur Folge, dass bei Browser, Mail-Clients, etc. (je nach Einsatzgebiet) eine Warnmeldung erscheinen wird, die besagt, dass dem Zertifikat nicht vertraut werden kann. Hier kann man zwar eine Ausnahme akzeptieren und speichern, jedoch ist bestimmt nicht jeder Internet-Benutzer in der Lage, diese „Fehlermeldung“ richtig zu deuten. Allerdings ist die Selbstsignierung auch die kostengünstigste Methode (Preise von Zertifikaten von offiziellen Stellen sind meist im vierstelligen Bereich).

Für private Seiten, die z.B. nur den Administrationsbereich vor Man-In-The-Middle schützen möchte, ist diese Methode jedoch mehr als ausreichend. Um ein solches Zertifikat zu erzeugen, verwendet man folgen Befehl:

openssl x509 -req -days 365 -in example.csr -signkey example.key -out example.crt

Das hier erstellte Zertifikat ist für ein ganzes Jahr gültig. Die nächste Möglichkeit ist die Nutzung von Zertifikaten, die von einer „offizeillen“ Stelle signiert werden. Hier würde ich die zwar etwas aufwändige dafür aber kostenlose Möglichkeit von, StartSSL empfehlen. Dieses Zertifikat wird von fast allen Stellen problemlos aktzeptiert (mit Ausnahme des Webbrowsers Opera), muss jährlich erneuert werden und kostet nichts. Alternativ gäbe es noch die ziemlich  kostspieligen Zertifkate von z.B. VeriSign.

Weitere Informationen zur Zertifikatserstellung können unter Anderem hier gefunden werden: