In den meisten Fällen verhält sich http://localhost für Entwicklungszwecke wie HTTPS. Es gibt jedoch einige Sonderfälle, z. B. bei benutzerdefinierten Hostnamen oder bei der Verwendung sicherer Cookies in verschiedenen Browsern, in denen Sie Ihre Entwicklerwebsite explizit so einrichten müssen, dass sie sich wie HTTPS verhält, um genau darzustellen, wie Ihre Website in der Produktion funktioniert. Wenn Ihre Produktionswebsite kein HTTPS verwendet, sollten Sie so schnell wie möglich auf HTTPS umstellen.
Auf dieser Seite wird erklärt, wie Sie Ihre Website lokal mit HTTPS ausführen.
Eine Kurzanleitung finden Sie unter mkcert-Kurzreferenz.**
Website lokal mit HTTPS ausführen – mit mkcert (empfohlen)
Wenn Sie HTTPS mit Ihrer lokalen Entwicklungswebsite verwenden und auf https://localhost oder
https://mysite.example (benutzerdefinierter Hostname) zugreifen möchten, benötigen Sie ein
TLS-Zertifikat,
das von einer Entität signiert wurde, der Ihr Gerät und Ihr Browser vertrauen. Diese Entität wird als vertrauenswürdige
Zertifizierungsstelle (CA) bezeichnet.
Der Browser prüft, ob das Zertifikat Ihres Entwicklungsservers von einer vertrauenswürdigen Zertifizierungsstelle signiert wurde, bevor er eine HTTPS-Verbindung herstellt.
Wir empfehlen, mkcert, eine plattformübergreifende Zertifizierungsstelle, zum Erstellen und Signieren Ihres Zertifikats zu verwenden. Weitere hilfreiche Optionen finden Sie unter Website lokal mit HTTPS ausführen – andere Optionen.
Viele Betriebssysteme enthalten Bibliotheken zum Erstellen von Zertifikaten, z. B. openssl. Sie sind jedoch komplexer und weniger zuverlässig als mkcert und nicht unbedingt plattformübergreifend, was sie für größere Entwicklerteams weniger zugänglich macht.
Einrichtung
Installieren Sie mkcert (nur einmal).
Folgen Sie der Anleitung zum Installieren von mkcert auf Ihrem Betriebssystem. Beispiel für macOS:
brew install mkcert brew install nss # if you use FirefoxFügen Sie mkcert Ihren lokalen Stammzertifizierungsstellen hinzu.
Führen Sie im Terminal den folgenden Befehl aus:
mkcert -installDadurch wird eine lokale Zertifizierungsstelle erstellt. Die von mkcert generierte lokale Zertifizierungsstelle wird nur lokal auf Ihrem Gerät als vertrauenswürdig eingestuft.
Generieren Sie ein Zertifikat für Ihre Website, das von mkcert signiert wurde.
Öffnen Sie im Terminal das Stammverzeichnis Ihrer Website oder ein beliebiges Verzeichnis, in dem Sie Ihr Zertifikat speichern möchten.
Führen Sie dann diesen Befehl aus:
mkcert localhostWenn Sie einen benutzerdefinierten Hostnamen wie
mysite.exampleverwenden, führen Sie folgenden Befehl aus:mkcert mysite.exampleDieser Befehl führt zwei Aktionen aus:
- Er generiert ein Zertifikat für den von Ihnen angegebenen Hostnamen.
- Er lässt das Zertifikat von mkcert signieren.
Ihr Zertifikat ist jetzt fertig und von einer Zertifizierungsstelle signiert, die Ihr Browser lokal als vertrauenswürdig einstuft.
Konfigurieren Sie Ihren Server so, dass er HTTPS und das gerade erstellte TLS-Zertifikat verwendet.
Wie Sie das tun, hängt von Ihrem Server ab. Hier einige Beispiele:
👩🏻💻 Mit Node.js:
server.js(ersetzen Sie{PATH/TO/CERTIFICATE...}und{PORT}):const https = require('https'); const fs = require('fs'); const options = { key: fs.readFileSync('{PATH/TO/CERTIFICATE-KEY-FILENAME}.pem'), cert: fs.readFileSync('{PATH/TO/CERTIFICATE-FILENAME}.pem'), }; https .createServer(options, function (req, res) { // server code }) .listen({PORT});👩🏻💻 Mit http-server:
Starten Sie Ihren Server so (ersetzen Sie
{PATH/TO/CERTIFICATE...}):http-server -S -C {PATH/TO/CERTIFICATE-FILENAME}.pem -K {PATH/TO/CERTIFICATE-KEY-FILENAME}.pem-Sführt Ihren Server mit HTTPS aus, während-Cdas Zertifikat und-Kden Schlüssel festlegt.👩🏻💻 Mit einem React-Entwicklungsserver:
Bearbeiten Sie
package.jsonso und ersetzen Sie{PATH/TO/CERTIFICATE...}:"scripts": { "start": "HTTPS=true SSL_CRT_FILE={PATH/TO/CERTIFICATE-FILENAME}.pem SSL_KEY_FILE={PATH/TO/CERTIFICATE-KEY-FILENAME}.pem react-scripts start"Wenn Sie beispielsweise ein Zertifikat für
localhostim Stammverzeichnis Ihrer Website erstellt haben:|-- my-react-app |-- package.json |-- localhost.pem |-- localhost-key.pem |--...Dann sollte Ihr
start-Skript so aussehen:"scripts": { "start": "HTTPS=true SSL_CRT_FILE=localhost.pem SSL_KEY_FILE=localhost-key.pem react-scripts start"👩🏻💻 Weitere Beispiele:
Öffnen Sie
https://localhostoderhttps://mysite.examplein Ihrem Browser, um zu prüfen, ob Sie Ihre Website lokal mit HTTPS ausführen. Sie sehen keine Browserwarnungen, da Ihr Browser mkcert als lokale Zertifizierungsstelle als vertrauenswürdig einstuft.
mkcert-Kurzreferenz
So führen Sie Ihre lokale Entwicklungswebsite mit HTTPS aus:
-
Richten Sie mkcert ein.
Installieren Sie mkcert, falls noch nicht geschehen, z. B. unter macOS:
brew install mkcert
Eine Anleitung zur Installation von mkcert unter Windows und Linux finden Sie hier.
Erstellen Sie dann eine lokale Zertifizierungsstelle:
mkcert -install -
Erstellen Sie ein vertrauenswürdiges Zertifikat.
mkcert {YOUR HOSTNAME e.g. localhost or mysite.example}
Dadurch wird ein gültiges Zertifikat erstellt, das von mkcert automatisch signiert wird.
-
Konfigurieren Sie Ihren Entwicklungsserver so, dass er HTTPS und das in Schritt 2 erstellte Zertifikat verwendet.
Sie können jetzt ohne Warnungen in Ihrem Browser auf https://{YOUR HOSTNAME} zugreifen.
</div>
Website lokal mit HTTPS ausführen – andere Optionen
Es gibt auch andere Möglichkeiten, Ihr Zertifikat einzurichten. Diese sind in der Regel komplizierter oder riskanter als die Verwendung von mkcert.
Selbst signiertes Zertifikat
Sie können auch auf eine lokale Zertifizierungsstelle wie mkcert verzichten und stattdessen Ihr Zertifikat selbst signieren. Dieser Ansatz birgt einige Stolperfallen:
- Browser vertrauen Ihnen nicht als Zertifizierungsstelle. Daher werden Warnungen angezeigt, die Sie manuell umgehen müssen. In Chrome können Sie das Flag
#allow-insecure-localhostverwenden, um diese Warnung fürlocalhostautomatisch zu umgehen. - Das ist unsicher, wenn Sie in einem unsicheren Netzwerk arbeiten.
- Es ist nicht unbedingt einfacher oder schneller als die Verwendung einer lokalen Zertifizierungsstelle wie mkcert.
- Selbst signierte Zertifikate verhalten sich nicht genau so wie vertrauenswürdige Zertifikate.
- Wenn Sie diese Methode nicht im Browserkontext verwenden, müssen Sie die Zertifikatsüberprüfung für Ihren Server deaktivieren. Wenn Sie sie in der Produktion nicht wieder aktivieren, entstehen Sicherheitsprobleme.
Wenn Sie kein Zertifikat angeben, erstellen die HTTPS-Optionen des React- und Vue-Entwicklungsservers im Hintergrund ein selbst signiertes Zertifikat. Das geht schnell, aber es werden dieselben Browserwarnungen und andere Stolperfallen wie bei selbst signierten Zertifikaten angezeigt. Glücklicherweise können Sie die integrierte HTTPS-Option von Frontend-Frameworks verwenden und ein lokal vertrauenswürdiges Zertifikat angeben, das mit mkcert oder einer ähnlichen Methode erstellt wurde. Weitere Informationen finden Sie im Beispiel für mkcert mit React.
Wenn Sie Ihre lokal ausgeführte Website in Ihrem Browser mit HTTPS öffnen, prüft der Browser das Zertifikat Ihres lokalen Entwicklungsservers. Wenn er feststellt, dass Sie das Zertifikat selbst signiert haben, prüft er, ob Sie als vertrauenswürdige Zertifizierungsstelle registriert sind. Da Sie das nicht sind, kann Ihr Browser dem Zertifikat nicht vertrauen und zeigt eine Warnung an, dass Ihre Verbindung nicht sicher ist. Wenn Sie fortfahren, wird trotzdem eine HTTPS Verbindung hergestellt, aber das geschieht auf eigenes Risiko.
Zertifikat, das von einer regulären Zertifizierungsstelle signiert wurde
Sie können auch ein Zertifikat verwenden, das von einer offiziellen Zertifizierungsstelle signiert wurde. Das bringt folgende Komplikationen mit sich:
- Sie haben mehr Einrichtungsarbeit als bei der Verwendung einer lokalen Zertifizierungsstelle wie mkcert.
- Sie müssen einen gültigen Domainnamen verwenden, den Sie kontrollieren. Das bedeutet, dass Sie offizielle Zertifizierungsstellen nicht für Folgendes verwenden können:
localhostund andere reservierte Domainnamen wieexampleodertest.- Alle Domainnamen, die Sie nicht kontrollieren.
- Ungültige Top-Level-Domains. Weitere Informationen finden Sie in der Liste der gültigen Top-Level-Domains.
Reverse-Proxy
Eine weitere Möglichkeit, mit HTTPS auf eine lokal ausgeführte Website zuzugreifen, ist die Verwendung eines Reverse-Proxys wie ngrok. Das birgt folgende Risiken:
- Jeder, mit dem Sie die Reverse-Proxy-URL teilen, kann auf Ihre lokale Entwicklungswebsite zugreifen. Das kann hilfreich sein, um Kunden Ihr Projekt zu präsentieren, aber es kann auch dazu führen, dass unbefugte Personen vertrauliche Informationen teilen.
- Einige Reverse-Proxy-Dienste sind kostenpflichtig. Die Preise können also ein Faktor bei der Auswahl des Dienstes sein.
- Neue Sicherheitsmaßnahmen in Browsern können die Funktionsweise dieser Tools beeinträchtigen.
Flag (nicht empfohlen)
Wenn Sie in Chrome einen benutzerdefinierten Hostnamen wie mysite.example verwenden, können Sie ein Flag verwenden, um den Browser zu zwingen, mysite.example als sicher zu betrachten. Das sollten Sie aus folgenden Gründen vermeiden:
- Sie müssen zu 100% sicher sein, dass
mysite.exampleimmer in eine lokale Adresse aufgelöst wird. Andernfalls riskieren Sie, Produktionsanmeldedaten preiszugeben. - Dieses Flag funktioniert nur in Chrome. Sie können also nicht browserübergreifend debuggen.
Vielen Dank an alle Reviewer und Mitwirkenden für ihre Beiträge und ihr Feedback, insbesondere an Ryan Sleevi, Filippo Valsorda, Milica Mihajlija und Rowan Merewood. 🙌
Hintergrund des Hero-Images von @anandu auf Unsplash, bearbeitet.