HTTPS mit Virtual Hosts in XAMPP nutzen

Bisher habe ich bei der lokalen Entwicklung immer auf HTTPS verzichtet. Nun musste ich mich für ein Projekt aber doch mit dem Thema auseinandersetzen, wie ein SSL-Zertifikat unter XAMPP mit Virtual Hosts eingesetzt werden kann.

Zum Ziel kommen wir in zwei Schritten:

  1. Einrichtung eines SSL-Zertifikats.
  2. Einrichtung des Virtual Hosts.

Voraussetzung ist (natürlich) XAMPP.

Einrichtung eines SSL-Zertifikats

Eine gute Anleitung zur Einrichtung gibt es auf robsnotebook.com. Sie ist zwar schon älter (von 2007), funktioniert aber noch bestens. Um ein Zertifikat zu erstellen, könnt ihr in der Kommandozeile wie folgt vorgehen:

  1. Geht in das Apache-Verzeichnis C:\xampp\apache.
  2. Führt makecert aus.
  3. Gebt eine PEM-Passphrase und die weiteren Informationen ein. Bei Common Name solltet ihr die Domain angeben, die ihr nachher für den Virtual Host benutzen wollt, damit das Zertifikat für diese Domain ausgestellt wird.
  4. Nachdem ihr alle Schritte ausgeführt habt, könnt ihr das Zertifikat gegebenenfalls noch in euren Browser importieren (es liegt unter C:/xampp/apache/conf/ssl.crt/server.crt). Nach dem Aufruf der Website werdet ihr aber trotzdem eine Warnung erhalten, da das Zertifikat selbst ausgestellt ist – hier müsst ihr dann eine Ausnahme hinzufügen.

Einrichtung des Virtual Hosts mit HTTPS

Eintrag in die Hosts-Datei von Windows

Zunächst kurz zur Vorbereitung: Um Windows wissen zu lassen, dass zum Beispiel die Domain florianbrinkmann.test auf die IP-Adresse 127.0.0.1 (localhost) weisen soll, müssen wir einen Eintrag in die hosts-Datei von Windows einfügen. Die Datei findet ihr unter C:\Windows\System32\drivers\etc. Um sie zu bearbeiten, braucht ihr Admin-Rechte (sucht in Windows nach dem Editor, klickt mit rechts drauf und wählt Als Administrator ausführen).

In der hosts-Datei fügt ihr nun am Ende einen Eintrag nach folgendem Muster ein:

127.0.0.1 florianbrinkmann.test
Code-Sprache: CSS (css)

Ihr müsst die Domain durch eure eigene Entwicklungs-Domain ersetzen. Anschließend könnt ihr die Datei speichern und schließen.

Anlegen des Virtual Hosts im Apache

Die Virtual Hosts im Apache findet ihr in der Datei C:\xampp\apache\conf\extra\httpd-vhosts.conf.  Öffnet die Datei und fügt einen Eintrag nach folgenden Muster ein (hierbei war eine Antwort von stackoverflow.com sehr hilfreich – die zugehörige Frage auch, sie hat mich nämlich auf den Artikel zur SSL-Zertifikat-Einrichtung gebracht):

<VirtualHost florianbrinkmann.test:80> DocumentRoot "C:\xampp\htdocs\florianbrinkmann.test" ServerName florianbrinkmann.test <Directory "C:\xampp\htdocs\florianbrinkmann.test"> Order allow,deny Allow from all </Directory> </VirtualHost> <VirtualHost florianbrinkmann.test:443> DocumentRoot "C:\xampp\htdocs\florianbrinkmann.test" ServerName florianbrinkmann.test SSLEngine On SSLCertificateFile "C:/xampp/apache/conf/ssl.crt/server.crt" SSLCertificateKeyFile "C:/xampp/apache/conf/ssl.key/server.key" <Directory "C:\xampp\htdocs\florianbrinkmann.test"> Order allow,deny Allow from all </Directory> </VirtualHost>
Code-Sprache: HTML, XML (xml)

Hier müsst ihr die Einträge von DocumentRoot, ServerName, Directory und die Domain innerhalb des VirtualHost-Elements anpassen. Der erste VirtualHost ist für normale HTTP-Verbindungen, der zweite für Verbindungen über HTTPS.

Eventuell müsst ihr in der Datei C:\xampp\apache\conf\httpd.conf noch den Kommentar vor der folgenden Zeile entfernen:

LoadModule ssl_module modules/mod_ssl.so
Code-Sprache: HTML, XML (xml)

Nun könnt ihr den Apache über das XAMPP-Control-Panel neu starten und solltet via HTTPS auf die Entwicklungs-Domain zugreifen können (inlusive Warnung des Browsers …).

Veröffentlicht in Tipps

6 Reaktionen zu »HTTPS mit Virtual Hosts in XAMPP nutzen«

  1. Beim Import des Keys im aktuellsten Firefox 64.0 kommt die Meldung
    "Dieses persönliche Zertifikat kann nicht installiert werden, weil Sie den benötigten privaten Schlüssel nicht besitzen, der bei der Anfrage für das Zertifikat erstellt wurde."
    Bei den anderen beiden generierten Keys, kann ich zwar die zuvor erstellte Passphrase (bei der Erstellung mindestens 4 Zeichen, sonst kommt eine kryptische Fehlermeldung!!) eingeben, aber die wird nicht erkannt.

    Aber man kann den Schritt überspringen, das Zertifikat wird beim Aufrufen trotzdem erkannt - natürlich auch mit Warnmeldung.

    1 € Paypal worth der Artikel 🙂

    1. Hi Sebastian,

      danke für den Kommentar und den Euro! 🙂

      Ich hatte vergessen das entsprechend anzupassen – bei der englischen Version des Artikels habe ich schon eine Update-Box drin, dass der Browser immer eine Warnung ausgibt, muss ich hier mal nachtragen.

      Viele Grüße
      Florian

  2. Eine .dev TLD sollte seit Dezember 2017 nicht mehr für lokale Entwicklungsumgebungen genutzt werden, da sie seitdem von Google verwaltet und eingesetzt wird. Deshalb kann sie seit Chrome 63 auch nicht mehr ohne SSL genutzt werden. Ich vermute mal, das war auch hier der Anlass für das SSL-Zertifikat.

    Die TLD .test und ein paar andere TLDs wurden von der IETF extra für lokale Zwecke reserviert und sollten dafür auch verwendet werden. Dann klappt es auch ohne SSL, was IMHO lokal nicht notwendig ist.

    Aber Danke für den stackoverflow - link, der mein default virtual host Problem mit XAMPP gelöst hat.

    1. Hi Mike,

      danke für deinen Kommentar und den Hinweis mit .test! Lokal hatte ich bereits auf .local umgestellt, aber das scheint ja auch nicht die beste Möglichkeit zu sein, wie sich via Mail herausgestellt hat 🙂

      Ich werde das bei Zeiten entsprechend anpassen mit der TLD. Warum ich lokal https haben wollte weiß ich gar nicht mehr genau, ich glaube es hatte irgendwas mit dem Testen einer API oder so zu tun, die nur mit HTTPS sprechen wollte.

      Viele Grüße
      Florian

  3. Danke Florian, genau das, was ich gerade benötigt habe. Leider muss ich eben doch ab und zu auf das gute alte XAMPP zurückgreifen. Mit mkcert ist ja die Einrichtung gültiger lokaler SSL-Zertifikate auch wirklich ein Kinderspiel.

Schreibe einen Kommentar

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