1016 Stimmen

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:

  1. Das Skript finden wir im Apache-Ordner der XAMPP-Installation, bei einer Standard-Installation unter Windows ist das der Pfad: C:\xampp\apache
  2. 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.

AntwortenPositivNegativDatumStimmen
11 Stimme

Es wäre nett zu wissen, in WELCHER DATEI der Virtuellhost eingefügt werden muss ...
10.06.2018 um 22:31

AntwortenPositiv Negativ
44 Stimmen

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

Positiv Negativ
Antworten
11 Stimme

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

AntwortenPositiv Negativ
11 Stimme

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

Positiv Negativ
Antworten
11 Stimme

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:

<VirtualHost www.example.com>
ServerAdmin webmaster@localhost
DocumentRoot "c:/xampp/htdocs/seiten/xyz"
ServerName example.com
ServerAlias example.com
</VirtualHost>
<VirtualHost s.example.com>
ServerAdmin webmaster@localhost
DocumentRoot "c:/xampp/htdocs/seiten/xyzs"
ServerName s.example.com
ServerAlias s.example.com
</VirtualHost>

# 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>

20.01.2020 um 06:42

AntwortenPositiv Negativ
11 Stimme

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

Positiv Negativ
Antworten
11 Stimme

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

AntwortenPositiv Negativ
11 Stimme

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

Positiv Negativ
Antworten
Antworten

Über den Autor

AvatarSoftware 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

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.