Bei vielen Internet-Providern kann man eine über SSL verschlüsselte Verbindung einrichten.
Will man dies aber am privaten Server einrichten, so arbeitet man meist mit sog. self-signed Zertifikaten, die im Browser als nicht vertrauenswürdig angezeigt werden. Einen kostenlosen Ausweg aus diesem Problem bietet der Provider StartSSL an.
Viele der folgenden Informationen sind aus einem Heise-Artikel aus dem Jahr 2010, in dem die Vorgehensweise zum Erstellen eines gültigen SSL-Zertifikates über StartSSL detailiert erklärt ist.
Schlüssel- und CSR-Erstellung
Grundsätzlich ist der Ablauf bei der Ausstellung eines Zertifikats aber immer der Gleiche. Zunächst generiert man sich ein Schlüsselpaar (einen öffentlichen und einen privaten Schlüssel). Unter Linux erledigt man das beispielsweise mit
openssl genrsa -out server_krismer_de.key 2048
Dieser Befehl erzeugt die Schlüssel mit jeweils 2048 Bit Länge und speichert sie zusammen in der Datei server_krismer_de.key. Der Zusatz -des3 sichert den Schlüssel mit einem Passwort, allerdings muss man dieses später beim Start des Webservers angeben. Der Befehl
openssl req -new -key server_krismer_de.key -out server_krismer_de.csr
liest den öffentlichen Schlüssel aus der Key-Datei und erstellt damit einen sogenannten Certificate Signing Request (CSR).
Erstelllung des Zertifiaktes über StartSSL
Nun geht es mit der „Express Lane“ auf der StartSSL-Homepage weiter. Hier füllt man zuerst ein Formular mit seinen persönlichen Daten aus (diese werden ggf. von StartSSL geprüft), und erhält darauf hin einen „Validation Code“ per E-Mail. Diesen gibt man im nächsten Schritt auf der Webseite ein. Anschließend erzeugt der Server ein SSL-Clientzertifikat für die spätere Authentifizierung auf den Webseiten des Anbieters. Dazu generiert er zunächst ein Schlüsselpaar und bietet dann die Installalation des Zertifikats im Browser an.
Jetzt geht’s an die Erzeugung des eigentlichen SSL-Zertifikats, wozu die Angabe der Domain notwendig ist, in unserem Beispiel krismer.de. Die Angabe muss ohne führendes www oder anderer Prefixe (also auch ohne server) erfolgen – also nur krismer.de. Danach schlägt StartSSL eine Email-Adresse vor, an die die Verfikationsmail mit einem Legitimationscode gesendet werden soll. Im nächsten Schritt fordert die Express Lane die Eingabe des Code.
Anschließend bietet StartSSL zwar freundlicherweise die Generierung eines Schlüsselpaares für das Zertifikat an. Da man seinen privaten Schlüssel zur Sicherung des eigenen Servers aber nie aus der Hand geben oder ihn von jemand anderem erzeugen lassen sollte, wählt man die Option „Skip“ und lädt den eigenen, zuvor erzeugten Certificate Signing Request auf den Server. Der Befehl
cat server_krismer_de.csr
gibt den Request in der Shell aus, von wo er sich in die Zwischenablage kopieren und im Formularfeld im Browser wieder einfügen lässt.
StartSSL ignoriert dabei alle Angaben im CSR und trägt stattdessen eigene Informationen zur Organisation und Unit in das Zertfikat ein. Dafür fragt der Dialog artig, für welche Subdomain das Zertifikat gelten soll und verwendet diese als Common Name. Typischerweise ergänzt man dazu im Formular einfach das www (oder wie im Fall von https://server.krismer.de, das server). Zusätzlich trägt das Zertifikat noch den Alt Name krismer.de ein. Damit funktioniert das Zertifikat sowohl beim Aufruf https://server.krismer.de als auch mit https://krismer.de.
Im Anschluss generiert StartSSL das Zertifikat und bietet es als Base64-codierten Text an. Um das Zertifikat auf dem eigenen PC zu speichern, markiert man den gesamten Text inklusive der Markierungen
—–BEGIN CERTIFICATE—–
…
—–END CERTIFICATE—–
kopiert ihn und fügt ihn in die Datei server_krismer_de.crt ein.
Apache-Konfiguration
Sowohl die CRT-Datei als auch die KEY-Datei legt man nun in den passenden Verzeichnissen des für SSL-konfigurierten Apache-Webservers ab, beispielsweise als server_krismer_de.crt unter /etc/pki/tls/certs und server_krismer_de.key unter /etc/pki/tls/private/. Die Pfade in der Apache-Konfiguration muss man eventuell ebenfalls anpassen:
SSLCertificateFile /etc/pki/tls/certs/server_krismer_de.crt
SSLCertificateKeyFile /etc/pki/tls/private/server_krismer_de.key
Da einige Zertifikate von StartSSL nicht in allen Browsern enthalten sind, muss der Web-Server das Intermediate-Zertifikat (IM) von StartSSL ausliefern, mit dem das SSL-Zertifikat unterschrieben wurde. Erst damit können dann alle Browser das neue Zertifikat bis auf eine vertrauenswürdige Instanz zurückverfolgen. Das benötigte IM liegt in der Datei sub.class1.server.ca.pem auf dem StartSSL-Server. Man kann es dort herunterladen und in /etc/pki/tls/certs/ ablegen. Mit der Angabe
SSLCertificateChainFile /etc/pki/tls/certs/sub.class1.server.ca.pem
in der Apache-Konfiguration macht man dem Webserver das Intermediate-Zertifikat bekannt. Um alle Änderungen wirksam zu machen, ist nun nur noch ein Neustart des Apache erforderlich. Der Aufruf von https://server.krismer.de bestätigt dann hoffentlich, dass man stolzer Inhaber eines regulären SSL-Zertifikats ist.
Will man das erstellte Zertifikat nicht als crt, sondern ebenso als pem Datei verwenden, so kann man dies durch den Befehl:
openssl x509 -in server_krismer_de.crt -out server.krismer.de.pem -text
erreichen.