XAMPP: SSL/HTTPS für lokale Projekte einrichten
Tutorial von Stefan Trost | Letztes Update am 10.06.2018 | Erstellt am 09.08.2017
In diesem Tutorial möchte ich euch zeigen, wie ihr eure XAMPP-Konfiguration so einrichten könnt, dass ihr eure lokalen PHP-Projekte auch über SSL bzw. im Browser über eine HTTPS-URL erreichen könnt. Praktisch ist dies zum Beispiel in dem Fall, dass auch eure Online-Website über HTTPS läuft und ihr so in beiden Fällen dieselbe Linkstruktur nutzen könnt.
In meinem Tutorial zum Thema virtuelle Domains hatte ich schon die Grundlagen erklärt, wie man mit XAMPP und Apache Domains definieren kann, die dann auf ein lokales Verzeichnis in der XAMPP-Installation zeigen können. Nach dieser Einrichtung sind alle Domains nur über HTTP erreichbar. Um auch HTTPS zu erlauben, sind noch die folgenden Schritte notwendig.
Zertifikat erstellen
Zunächst müssen wir uns im ersten Schritt ein eigenes SSL-Zertifikat erstellen. Zum Glück hält XAMPP bereits ein kleines Skript dafür bereit, das wir folgendermaßen öffnen können:
- Das Skript finden wir im Apache-Ordner der XAMPP-Installation, bei einer Standard-Installation unter Windows ist das der Pfad: C:\xampp\apache
- In diesem Ordner finden wir die Datei makecert.bat, mit einem Doppelklick auf die Datei können wir das Skript starten.
Nach dem Starten des Scripts öffnet sich die Kommandozeile, wo wir nur noch den Anweisungen folgen brauchen. Als erstes müssen wir ein Passwort für unseren Key eingeben, das sollte so aussehen.
Generating a 2048 bit RSA private key ............+++ ...................+++ writing new private key to 'privkey.pem' Enter PEM pass phrase:
Hier können wir ein beliebiges Passwort verwenden und anschließend wiederholen. Es folgen weitere Fragen wie beispielsweise Land (Country Name) oder Unternehmen (Organization Name). Hier können wir im Prinzip eingeben, was wir möchten oder einen Punkt eintippen, wenn wir das Feld freilassen möchten. Diese Angaben werden später in unserem Zertifikat verwendet. Als "Common Name" geben wir den Namen unserer URL ein. Zuletzt müssen wir das Passwort vom Beginn noch einmal wiederholen, dann wird das Zertifikat erstellt.
Das ganze sieht dann beispielsweise so aus:
Generating a 2048 bit RSA private key ............+++ ...................+++ writing new private key to 'privkey.pem' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:DE State or Province Name (full name) [Some-State]:NRW Locality Name (eg, city) []:BOT Organization Name (eg, company) [Internet Widgits Pty Ltd]:STT Organizational Unit Name (eg, section) []:WEB Common Name (e.g. server FQDN or YOUR name) []:localhost Email Address []:local@example.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:. An optional company name []:. Enter pass phrase for privkey.pem: writing RSA key Signature ok subject=/C=DE/ST=NRW/L=BOT/O=STT/OU=WEB/CN=localhost/emailAddress=local@example.com Getting Private key 1 Datei(en) verschoben. 1 Datei(en) verschoben. ----- Das Zertifikat wurde erstellt. The certificate was provided. Drücken Sie eine beliebige Taste . . .
Nun ist unser Zertifikat erstellt und dieser Schritt ist fertig. Das fertige Zertifikat wurde in den Ordnern C:\xampp\apache\conf\ssl.crt und C:\xampp\apache\conf\ssl.key abgelegt, sofern wir XAMPP in C:\xampp installiert haben.
VirtualHost definieren
Im nächsten Schritt müssen wir für jede Domain einen neuen VirtualHost in der Datei C:\xampp\apache\conf\extra\httpd-vhosts.conf einrichten, ähnlich wie wir es auch schon in dem ersten Tutorial gemacht haben.
An dieser Stelle ist wichtig zu wissen, dass HTTP über Port 80 läuft, SSL dagegen aber über Port 443. Im folgenden definieren wir die URL example.com, die sowohl über http://www.example.com als auch über https://www.example.com erreichbar sein soll. Der erste Block <VirtualHost *:80> gilt für alle Anfragen über Port 80 und sieht in etwa so aus, wie die Blöcke aus dem ersten Tutorial. Unter DocumentRoot können wir das Stammverzeichnis angeben.
# HTTP <VirtualHost *:80> DocumentRoot "C:/xampp/htdocs/myproject" ServerName example.com ServerAlias www.example.com </VirtualHost> # HTTPS <VirtualHost *:443> DocumentRoot "C:/xampp/htdocs/myproject" ServerName example.com ServerAlias www.example.com SSLEngine on SSLCertificateFile "conf/ssl.crt/server.crt" SSLCertificateKeyFile "conf/ssl.key/server.key" </VirtualHost>
Die HTTPS-Anfragen werden über den zweiten Block <VirtualHost *:443> definiert. Die Angaben zum DocumentRoot-Verzeichnis, ServerName und ServerAlias sind identisch. Zusätzlich müssen wir aber noch Angaben zu unserem SSL-Zertifikat und Key machen. Damit sagen wir dem Server, wo er die entsprechenden Dateien findet. Wie man sieht, sind es die Ordner, in denen gerade unser Zertifikat gespeichert wurde.
In dem Beispiel hier haben wir nur eine URL definiert, die über HTTP und HTTPS erreichbar sein soll. Jede weitere Domain bzw. URL muss genauso definiert werden, wir können beliebig viele Blöcke dieser Art untereinander schreiben.
Apache neu starten
Damit unsere Änderungen aktiv werden, müssen wir jetzt Apache neu starten. Dafür öffnen wir das XAMPP Control Panel und klicken hinter dem Modul "Apache" auf "Stop" und anschließend wieder auf "Start", damit der Server neu mit der neuen Konfiguration startet.
Ausnahmen hinzufügen
Nun sind wir mit unserer Konfiguration fertig. Wenn wir jedoch den Browser aufrufen, erhalten wir unter Umständen (je nach Browser und Browsereinstellungen) die Fehlermeldung "Diese Verbindung ist nicht sicher" mit dem Fehlercode SEC_ERROR_UNKNOWN_ISSUER. Dazu liefert der Firefox-Browser den abschreckenden Text "Der Inhaber von ... hat die Website nicht richtig konfiguriert. Firefox hat keine Verbindung mit der Website aufgebaut, um ihre Informationen vor Diebstahl zu stützen". Kurz gesagt: Wir können unsere Website gar nicht aufrufen.
Der Grund dafür ist, dass wir das Zertifikat selbst erstellt haben und Firefox von sich aus nur Zertifikaten von offiziellen Zertifizierungsstellen traut. Für unsere Zwecke wäre das natürlich übertrieben, weswegen wir getrost auf den Button "Ausnahme hinzufügen..." klicken können. In dem sich nun öffnenden Dialog sollten wir die Option "Diese Ausnahme dauerhaft speichern" aktivieren, sonst werden wir bei jedem Aufruf erneut gefragt. Anschließend können wir auf "Sicherheits-Ausnahmeregel bestätigen" klicken und sollten nun unsere Website über die HTTPS-URL sehen können.
Über den Autor
Software von Stefan Trost finden Sie auf sttmedia.de. Benötigen Sie eine individuelle Software nach Ihren eigenen Wünschen? Schreiben Sie uns: sttmedia.de/kontakt
Profil anzeigen
Ähnliche Themen
Virtuelle Domains für Apache/XAMPP erstellen
Tutorial | 0 Kommentare
XAMPP: Aufruf über HTTPS führt zu Error 403 (Access Forbidden)
Frage | 1 Antwort
MySQL: CSV Export als auf dem Server gespeicherte Datei
Tutorial | 0 Kommentare
Alle HTTP-Anfragen auf HTTPS umleiten
Frage | 2 Antworten
Mehrere Texte gleichzeitig ersetzen
Tutorial | 0 Kommentare
Delphi: Pfad einer Bibliothek oder Unit für alle Projekte hinzufügen
Frage | 1 Antwort
XAMPP: Datei makecert bearbeiten
Frage | 9 Antworten
Wichtiger Hinweis
Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.
Jetzt mitmachen
Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.
Es wäre nett zu wissen, in WELCHER DATEI der Virtuellhost eingefügt werden muss ...
10.06.2018 um 22:31
Dieses Tutorial baut auf das erste Tutorial zu diesem Thema auf, entsprechend ist es auch die gleiche Datei, die hier bearbeitet wird:
C:\xampp\apache\conf\extra\httpd-vhosts.conf
Ich habe den Dateipfad jetzt auch hier nochmal in diesem Tutorial eingefügt, ich hoffe damit wird es etwas klarer.
10.06.2018 um 23:31
Problem: XAMPP (apache) lässt sich nach der Änderung nicht mehr starten, da der SSL Block des VHosts in eine andere datai eingetragen werden muss ... musste eine Weile suchen. Die Datei ist im selben Verzeichnis und hat ssl im Namen.
Hab es mit der aktuellen xampp 7.3.x version getestet. Google Chrome spuckt immer rum (Verbindung sei nicht sicher) ... Ausnahme geht da wohl nicht ...
19.06.2018 um 18:16
Also ich habe alle Blöcke in der gleichen Datei, das geht ohne Probleme. Vielleicht liegt es an der Version dass sich da etwas geändert hat?! Oder du hast einen anderen Fehler gemacht?
Das mit der nicht sicheren Verbindung ist klar. Wenn du selber ein Zertifikat erstellst wird diesem Zertifikat natürlich erstmal nicht vertraut. Das heißt du musst dein eigenes Zertifikat als vertraulich einstufen (gibt dazu Tutorials im Netz) oder einfach eine Ausnahme hinzufügen. Im Firefox ist das einfach, Chrome zickt da gerne etwas herum.
19.06.2018 um 21:25
Müssen die Angaben aus Teil 2 des Tutorials zusätzlich zu den Angaben aus Partz 1 in die httpd-vhosts.conf eingefügt werden, so das die httpd-vhosts.conf demnach wie folgt aussähe:
20.01.2020 um 06:42
Nein, nicht zusätzlich.
Den ersten Abschnitt brauchst du nicht, es reicht das was du unter #HTTP und #HTTPS definiert hast.
Wobei du in deinem Beispiel bei der HTTP-Variante eine Umleitung zu HTTPS einbauen solltest, damit die Seite auch immer nur über HTTPS erreichbar ist und Leute die http.. eingeben zu https.. umgeleitet werden.
20.01.2020 um 15:35
Hallo Stefan!
Ich habe Deine Anleitung befolgt erhalte aber im Ergebnis vom Firefox den Fehlercode "SSL_ERROR_RX_RECORD_TOO_LONG" ausgegeben. Bei diesem Fehler besteht auch nicht die Möglichkeit eine Ausnahmeregel zu definieren.
Den gleichen Fehler habe ich übrigens zuvor auch schon erhalten, als ich es mit Zertifikatsdateien versucht habe, die ich mit dem Client für Letsencrypt erstellt hatte. Ich hatte die Hoffnung, dass es mit Deiner Anleitung klappt.
Hast Du vielleicht eine Idee woran es liegen könnte?
Hier noch ein paar Infos zu den Rahmenbedingungen. Hilft vielleicht Rückfragen zu vermeiden.
Ich nutze schon seit einiger Zeit einen aktuellen XAMPP auf meinem lokalen PC. Für jedes Projekt habe ich einen virtuellen Host definiert.
Der Hostname auf dem lokalen System lautet "local.#meine-domain#.de". Über die hosts-Datei von Windows sorge ich dafür, dass ein Zugriff auf diese Domain auf meinen eigenen Rechner umgeleitet wird.
Der Zugriff auf den Hostname via HTTP funktioniert einwandfrei.
Auf dem Live-System habe ich mal folgenden Test durchgeführt:
Ich habe die Sub-Domain "local.#meine-domain#.de" angelegt, einen entsprechenden virtuellen Host definiert und mit Letsencrypt ein Zertifikat erstellt und eingebunden. Die Domain ist via HTTP und via HTTPS über das Internet erreichbar. Sie lässt sich von meinem lokalen PC aber auch vom Server selbst aus aufrufen.
Anschließend habe ich in der Windows hosts-Datei die Zeile
127.0.0.1 local.#meine-domain#.de
hinzugefügt und anschließend erneut versucht die Seite vom Server aus zu laden.
Ergebis: Fehlanzeige!
Ich erhalte wieder den oben genannten Fehlercode.
Ich bin mit meinem Latein am Ende und hoffe Du hast einen guten Tipp für mich :-(
Viele Grüße!
Bill
18.03.2020 um 21:44
Ich hatte diesen Fehler auch noch nie, laut einer kurzen Internetrecherche kann der Fehler aber scheinbar entweder daher stammen, dass die Ports auf dem Server falsch konfiguriert sind (Port 443 sollte es sein) oder die verwendeten SSL/TLS-Bibliotheken upgedatet werden müssen. Ich würde mal in diese Richtung weiter probieren...
19.03.2020 um 19:53