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.

2 Kommentare zu “SSL mit dem Apachen

  1. Pingback: blog.neidahl.de » MySQL Connection über SSL

  2. Pingback: blog.neidahl.de » SSL mit dem Apachen – Renew

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.