SSL Konfiguration von Apache mit XAMPP

Um lokal zu entwickeln und dabei trotzdem möglichst nach an der Zielumgebung der Webseite zu bleiben, kann man in der eigenen Entwicklungsumgebung SSL verwenden. SSL ist nichts anderes als das Verschlüsselungsprotokoll, dass zum einsatz kommt, wenn man eine Seite via https erreichen möchte. Die Datenübertragung zwischen Sender und Empfänger wird dabei verschlüsselt, so dass ein dritter, der den Datenstrom mitliest, dessen Inhalt nicht erkennen kann.

Die Konfiguration von SSL für XAMPP hat mich viel Zeit und Nerven gekostet. Ich hoffe, ich kann anderen einen ähnlichen Aufwand sparen, denn die Lösung ist vergleichsweise schnell vorgenommen.

Openssl ans Laufen bringen

Zuerst einmal muss man sicherstellen, dass die PHP Erweiterung für openssl aktiviert ist und zwar nur einmal. In der Standardkonfiguration ist diese nämlich schon zweimal aktiviert. Dazu muss man in der php.ini Datei alle Einträge mit openssl finden. Letztlich darf nur einmal extension=openssl in der php.ini stehen bleiben und zwar ohne Semikolon am Anfang.

Auch die Umgebungsvariable „OPENSSL_CONF“ muss gesetzt werden. Unter Windows geht das in der Systemsteuerung->System->Erweiterte Systemeinstellungen ->Erweitert->Umgebungsvariablen. Dort wird unter Systemvariablen ein neuer Eintrag angelegt mit dem Namen OPENSSL_CONF. Der Wert der Variablen ist der Pfad zur Konfiguartionsdatei von Openssl. Diese befindet sich bei XAMPP im PHP Ordner unter extras/openssl und hat den Namen openssl.cnf. Der vollständige Pfad könnte zum Beispiel so aussehen:

C:\xampp\php\extras\openssl\openssl.cnf

Dabei ist besonders auf die Dateiendung der Datei zu achten, die nämlich nicht openssl.conf heißt, und auch nicht openssl.cfg, sondern openssl.cnf . Das hatte mich auch nochmal eine halbe Stunde gekostet, da ich diese Dateiendung nicht richtig eingetragen hatte und aus den Logs immer die Rückmeldung kam, das der Pfad nicht gefunden wurde.

Zertifikat für sich selbst erstellen

Sobald openssl funktioniert, muss man sich selbst ein Zertifikat ausstellen. Das erfolgt über die Powershell in dem Ordner, in dem die openssl.exe liegt. Bei Apache XAMPP ist das xampp/apache/bin. Dort wird ein Powershell-Fenster geöffnet und via des Befehls

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout server.key -out server.crt

ein selbstsigniertes Zertifikat nebst privaten Schlüssel erstellt. Diese beiden Dateien müssen dann in den jeweiligen Zertifikate und Schlüssel-Ordner unter apache/conf und ersetzen dort unter ssl.crt und ssl.key die server-Dateien.

Erweiterung für vhost-Einträge

Um die Verschlüsselung für eine bestimmte Seite nutzen zu können müssen schließlich noch die Apache vhost-Einträge erweitert werden um die Pfade zu den Zertifikaten und das Einschalten der SSL Verschlüsselung. In der Datei xampp/apache/conf/extrahttpd-vhosts.conf (man beachte die Dateiendung) wird der vhost-Eintrag für die Zielseite angepasst:

SSLEngine on
SSLCertificateFile C:\xampp\apache\conf\ssl.crt\server.crt
SSLCertificateKeyFile C:\xampp\apache\conf\ssl.key\server.key

Außerdem muss der Port der Seite umgestellt werden auf den https Port 443. Ein vollständiger vhost-Eintrag könnte dann so aussehen:

ServerAdmin john@it-profi-le.de
DocumentRoot "C:/xampp/htdocs/MeinTypo39Projekt/public"
ServerName typo39.local
SSLEngine on
SSLCertificateFile C:/xampp/apache/conf/ssl.crt/server.crt
SSLCertificateKeyFile C:/XAMPP73/apache/conf/ssl.key/server.key

Nur für Testzwecke

Damit wäre die Konfiguration von SSL erledigt und die Seite wäre gem. Beispiel erreichbar unter https://typo39.local.
Aber was ist das? Die gängigen Browser warnen alle davor, das die Seite nicht wirklich vertrauenswürdig wäre. Das ist auch so richtig, denn schließlich haben wir uns selbst ein Zertifikat ausgestellt und wollen allen Erstes anderen mitteilen, dass wir vertrauenswürdig sind, weil wir das ja selbst sagen.
Je nach Browsereinstellung kann man hier eine Ausnahme hinzufügen. Eventuell ist das aber auch gar nicht möglich, wenn der Nutzer seine Browsereinstellungen selbst nicht ändern darf, zum Beispiel in einem Firmennetzwerk. In diesem Fall hilft nur das nutzen eines anderen Browsers oder die jeweilige Einmal-Genehmigung.