SSL mit dem Apachen
Wer einen ( Apache ) Webserver betreibt möchte bestimmt auch das eine oder das andere mal eine verschlüsselte Verbindung zu den verschiendensten Webseiten desselben aufbauen. Um das zu ermöglichen sind mehrere, jedoch recht einfache Schritte nötig.
Im übrigen bezieht sich dieses HowTo auf einen Apache Webserver der Version 2.x auf einem Debian / Ubuntu Server System ! Grundlegend ist dieses HowTo für alle Linux Derivate nutzbar, doch an der einen oder anderen Stelle ist dann eben die Distributionsspezifische Verwendung anzupassen.
Beginnen wir zuerst einmal mit den Vorbereitungen des Apache Webservers. Der Apache muss auf jeden Fall das SSL Modul installiert und aktiviert bekommen.
root@server:# ls -al /etc/apache2/mods-enabled |grep ssl
lrwxrwxrwx 1 root root 26 Sep 24 16:43 ssl.conf -> ../mods-available/ssl.conf
lrwxrwxrwx 1 root root 26 Sep 24 16:43 ssl.load -> ../mods-available/ssl.load
Als nächster Schritt wird nun das Zertifikat erstellt. Dieser Vorgang beschreibt die Erstellung eines sogenannten Self-Signed Zertifikat, welches lediglich für die private Verwendung gedacht ist. Für eine „offizielle“ Nutzung empfehle ich den Einkauf eines Signed ( Trusted ) Zertifikates, beispielsweise über psw.net. In einem Verzeichnis Eurer Wahl werden nun die relevanten Files generiert und abgelegt. Der Apache Webserver muss Zugriff auf dieses Verzeichnis haben ! Beginnen wir mit der Erstellung des Code-Signing-Requests, wofür das openssl-Paket auf dem System vorhanden sein muss ( falls nicht, bitte einfach mittels aptitude install openssl installieren ):
openssl req -new > new.cert.csr
Nun werden alle entsprechenden Angaben eingetragen, welche nach und nach abgefragt werden. Wichtig ist hierbei, dass bei Common Name der Name der zu verschlüsselnden Domain ( Subdomain ) angegeben wird.
z.B. Common Name (eg, YOUR name) []:www.neidahl.de
Falls gewünscht kann der erstellte CSR ( Code Signing Request ) noch mittels eines Passwortes geschützt werden. Als nächster Schritt wird der private Schlüssel erstellt ( Private Key ), das geschieht über folgendes Kommando
openssl rsa -in privkey.pem -out new.cert.key
Sollte zuvor bei der Erstellung des CSR ein Passwort angegeben worden sein, ist hier nun die Eingabe eben dieses nötig, sonst wird das Lesen des CSR verweigert. Nun sollten folgende drei Files in dem gewählten Verzeichnis vorhanden sein:
-rw-r--r-- 1 root root 676 Sep 25 09:14 new.cert.csr
-rw-r--r-- 1 root root 891 Sep 25 09:56 new.cert.key
-rw-r--r-- 1 root root 963 Sep 25 09:14 privkey.pem
Weiter geht es nun mit der Erstellung des eigentlichen Zertifikats. Da alle dafür nötigen Files vorliegen, kann dies über folgendes openssl Kommando erledigt werden
openssl x509 -in new.cert.csr -out new.cert.cert -req -signkey new.cert.key -days 1095
Mit dem angegebenen Parameter -days wird die Gültigkeitsdauer des Zertifikats, in Tagen angegeben ( hier wären das drei jahre ). Nach einer Validierung sollte nun das eigentliche Zertifikatsfile vorhanden sein und es kann mit der Einbindung in den Apachen weitergehen
-rw-r--r-- 1 root root 904 Sep 25 10:03 new.cert.cert
Am besten ist es, einen eigenen Virtual-Host für die SSL ( Secure Socket Layer ) Webseiten zu erstellen. Hierzu ist beim anlegen dieses Virtual Hosts zwingend darauf zu achten, dass dieser auch auf Port 443 gebunden ist und nicht wie standardmäßig auf Port 80. Neben den üblichen Konfigurationen des Virtual Hosts sind nun folgende vier Zeilen das eigentlich relevante um verschlüsselte Verbindungen aufzubauen:
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
SSLCertificateFile /{Pfad_zu_den_o.g._Files}/new.cert.cert
SSLCertificateKeyFile /{Pfad_zu_den_o.g._Files}/new.cert.key
Die Einstellungen des Optionsschalters SSLCipherSuite sind sehr vielfältig und können je nach Sicherheitswünschen entsprechend schärfer oder entspannter eingestellt werden. Ich empfehle hier einen kurzen Blick in die entsprechende Dokumentation ;o) Nun ist noch ein Neustart des Apachen nötig und wenn nichts bei der Einrichtung des Virtual Hosts schief gelaufen ist und die Zertifikats sowie Key Dateien alle die entsprechenden Berechtigungen ( der Apache muss diese lesen können ) haben, ist nun eine verschlüsselte Verbindung über https auf den neuen Virtual Host möglich.
blog.neidahl.de » MySQL Connection über SSL
[…] Voraussetzung für eine saubere SSL Verschlüsselung ist natürlich ein Zertifikat inklusive dem entsprechenden Schlüssel. Entweder gilt es hier also ein offizielles SSL-Zertifikat zu kaufen, oder ein selbst zertifiziertes zu erstellen. Da in der Regel der Quell- und der Ziel-Host in einer Hand sind, reicht hier meiner Meinung ein self-signed Zertifikat vollkommen aus – eine Anleitung, wie diese erstellt werden können findet sich hier in meinem Blog. […]
blog.neidahl.de » SSL mit dem Apachen – Renew
[…] meinem letzten Artikel ( der ist schon etwas älter ) zur SSL Verschlüsselung von Webseiten mit dem Apache Webserver hat […]