Eigenes SSL-Zertifikat erzeugen

Vorwort

So ein Zertifikat benötigt man schneller, als man vielleicht glauben möchte. Es fängt an bei einer simplen https-Verbindung und endet beim verschlüsselten IMAP-Server. SSL (Secure Socket Layer, mittlerweile TLS) kann bei vielen Protokollen eingesetzt werden, Beispiele wären:

  • HTTP - Verbindung vom Browser zum Webserver
  • SMTP - Verbindung zwischen Mail-Client und Postausgangsserver
  • POP3 - Transport der E-Mails vom Mailserver zum Client
  • IMAP - Verwaltung von E-Mails auf dem Mailserver über Client

Diese Protokolle lassen sich alle (kompatible Server/Client-Software vorausgesetzt) mit SSL verschlüsseln. Das Protokoll HTTPS ist sicherlich am häufigsten im Einsatz, einige bekannte Seiten sind unter anderem Ebay, Paypal, GMX (das soll keine Werbung sein, mir fallen die nur gerade ein ;-)). Aber wer mehr darüber wissen möchte, kann es ja nachlesen, nun zum essentiellen Teil: dem Erstellen eines vollwertigen, selbst signierten Zertifikates.

System und Software

Natürlich klappt das Ganze auch unter Windows, nur tue ich mir das nicht an :-) Verwendet wurde:

  • Debian „Lenny“ 5.0
  • OpenSSL 0.9.8g 19 Oct 2007

Installation

Sofern nicht vorhanden, openssl nachinstallieren:

apt-get install openssl

Erstellung des Zertifikates

Alle verwendeten Optionen ließt 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 :-P

Erzeugung des Schlüssels

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!

Schlüssel mit Passphrase

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.

openssl genrsa -des3 -out example.key 4096

Schlüssel ohne Passphrase

Meist wird man jedoch einen ungeschützten Schlüssel verwenden, da dieser z.B. bei einem Server-Neustart ohne Passwort-Abfrage gelesen werden kann (Dateirechte entsprechend anpassen! Nur root und der Dienst sollen diese Datei lesen können!).

openssl genrsa -out example.key 4096

Passphrase entfernen

Will man von einem vorhandenen geschützten Schlüssel die Passphrase entfernen, hilft folgender Befehl:

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

Erzeugung einer Certificate Signing Request (CSR)

Den Certificate Signing Request (CSR) benötigt man, um ein vollwertiges Zertifikat von einer Zertifizierungsstelle zu erhalten, man erstellt es mit folgender Zeile:

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

Signierung des Zertifikates

Hier gibt es wiederum 2 Wege:

1. Die Selbstsignierung

D.h. man „unterschreibt“ das Zertifikat selber, dies hat aber zur Folge, dass bei Browsern, Mail-Clients etc. (je nach Einsatzgebiet) eine Warnmeldung erscheinen wird, die besagt, dass dem Zertifikat nicht vertraut werden kann:

Das kann man zwar wie folgt umgehen:

Jedoch ist bestimmt nicht jeder Benutzer des WWW in der Lage, diese „Fehlermeldung“ richtig zu deuten. Allerdings ist das eigenhändige Signieren die kostengünstigste Methode (siehe hier die horrenden Preise auf VeriSign.com ;-))

Für private Seiten, die z.B. nur den Administrationsbereich vor Man-In-The-Middle schützen möchten, ist diese Methode mehr als ausreichend:

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

Das erstellte Zertifikat ist somit für ein ganzes Jahr gültig.

2. Freie Zertifizierungsstelle

Neben der Selbstsignierung gäbe es natürlich noch den Weg, eine der bekannten Zertifizierungsstellen wie GoDaddy oder VeriSign zu kontaktieren, allerdings wird das kostentechnisch ein kleiner Schock werden ;-) Es gibt allerdings auch Firmen, die gegen kleine Einschränkungen Zertifikate gratis signieren. Ein bekanntes Beispiel ist

deren großer Vorteil ist, dass alle bekannten Browser deren Zertifikate anstandslos akzeptieren! Dann wäre da noch

Vorteil: wesentlich leichter und schneller einzurichten als StartSSL, allerdings Nachteil: Browser (und andere Clients) kennen deren Root-Zertifikat nicht und erzeugen besagte Fehlermeldung. Wer also ein Zertifikat nur in kleinen Kreisen benötigt (Freundeskreis, nur du selbst), importiert sich deren Root-Cert und es klappt ebenfalls. Siehe dazu die sehr guten, vorhandenen Erklärungen:

Quellen

Kommentare