W większości przypadków http://localhost zachowuje się jak HTTPS na potrzeby programistyczne. Istnieją jednak pewne przypadki szczególne, takie jak niestandardowe nazwy hostów lub używanie bezpiecznych plików cookie w różnych przeglądarkach, w których musisz wyraźnie skonfigurować witrynę deweloperską tak, aby zachowywała się jak HTTPS, aby dokładnie odzwierciedlała działanie witryny w środowisku produkcyjnym. (Jeśli Twoja witryna produkcyjna nie korzysta z HTTPS, priorytetowo potraktuj przejście na HTTPS).
Na tej stronie dowiesz się, jak uruchomić witrynę lokalnie przy użyciu protokołu HTTPS.
Krótkie instrukcje znajdziesz w krótkim przewodniku po mkcert**.
Uruchamianie witryny lokalnie z protokołem HTTPS za pomocą mkcert (zalecane)
Aby używać protokołu HTTPS w lokalnej witrynie deweloperskiej i uzyskać dostęp do https://localhost lub https://mysite.example (niestandardowa nazwa hosta), potrzebujesz certyfikatu TLS podpisanego przez podmiot, któremu ufa Twoje urządzenie i przeglądarka, czyli przez zaufany urząd certyfikacji.
Przed utworzeniem połączenia HTTPS przeglądarka sprawdza, czy certyfikat serwera deweloperskiego jest podpisany przez zaufany urząd certyfikacji.
Do utworzenia i podpisania certyfikatu zalecamy użycie mkcert, czyli urzędu certyfikacji na wiele platform. Inne przydatne opcje znajdziesz w artykule Uruchamianie witryny lokalnie przy użyciu protokołu HTTPS: inne opcje.
Wiele systemów operacyjnych zawiera biblioteki do tworzenia certyfikatów, takie jak openssl. Są one jednak bardziej złożone i mniej niezawodne niż mkcert, a także nie zawsze działają na wielu platformach, co sprawia, że są mniej dostępne dla większych zespołów programistów.
Konfiguracja
Zainstaluj mkcert (tylko raz).
Postępuj zgodnie z instrukcjami instalowania mkcert w swoim systemie operacyjnym. Na przykład w systemie macOS:
brew install mkcert brew install nss # if you use FirefoxDodaj mkcert do lokalnych głównych urzędów certyfikacji.
Uruchom w terminalu to polecenie:
mkcert -installSpowoduje to wygenerowanie lokalnego urzędu certyfikacji. Lokalny urząd certyfikacji wygenerowany przez mkcert jest zaufany tylko lokalnie, na Twoim urządzeniu.
Wygeneruj certyfikat dla swojej witryny podpisany przez mkcert.
W terminalu przejdź do katalogu głównego witryny lub dowolnego katalogu, w którym chcesz przechowywać certyfikat.
Następnie uruchom:
mkcert localhostJeśli używasz niestandardowej nazwy hosta, np.
mysite.example, uruchom:mkcert mysite.exampleTo polecenie wykonuje 2 czynności:
- Generuje certyfikat dla podanej nazwy hosta.
- Umożliwia mkcert podpisanie certyfikatu.
Certyfikat jest teraz gotowy i podpisany przez urząd certyfikacji, któremu przeglądarka ufa lokalnie.
Skonfiguruj serwer tak, aby używał protokołu HTTPS i utworzonego właśnie certyfikatu TLS.
Sposób wykonania tej czynności zależy od serwera. Oto kilka przykładów:
👩🏻💻 Za pomocą węzła:
server.js(zastąp{PATH/TO/CERTIFICATE...}i{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});👩🏻💻 Za pomocą http-server:
Uruchom serwer w ten sposób (zastąp
{PATH/TO/CERTIFICATE...}):http-server -S -C {PATH/TO/CERTIFICATE-FILENAME}.pem -K {PATH/TO/CERTIFICATE-KEY-FILENAME}.pem-Suruchamia serwer z HTTPS, a-Custawia certyfikat, natomiast-Kustawia klucz.👩🏻💻 Z serwerem programistycznym React:
Zmodyfikuj plik
package.jsonw ten sposób i zastąp{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"Jeśli na przykład certyfikat dla domeny
localhostzostał utworzony w katalogu głównym witryny:|-- my-react-app |-- package.json |-- localhost.pem |-- localhost-key.pem |--...Skrypt
startpowinien wyglądać tak:"scripts": { "start": "HTTPS=true SSL_CRT_FILE=localhost.pem SSL_KEY_FILE=localhost-key.pem react-scripts start"👩🏻💻 Inne przykłady:
Otwórz
https://localhostlubhttps://mysite.examplew przeglądarce, aby sprawdzić, czy witryna działa lokalnie z protokołem HTTPS. Nie zobaczysz żadnych ostrzeżeń przeglądarki, ponieważ przeglądarka ufa mkcert jako lokalnemu urzędowi certyfikacji.
Krótkie omówienie mkcert
Aby uruchomić lokalną witrynę deweloperską z protokołem HTTPS:
-
Skonfiguruj mkcert.
Jeśli nie masz jeszcze zainstalowanego mkcert, zainstaluj go, na przykład w systemie macOS:
brew install mkcert
Instrukcje dotyczące systemów Windows i Linux znajdziesz w sekcji Instalowanie mkcert.
Następnie utwórz lokalny urząd certyfikacji:
mkcert -install -
Utwórz zaufany certyfikat.
mkcert {YOUR HOSTNAME e.g. localhost or mysite.example}
Spowoduje to utworzenie prawidłowego certyfikatu, który mkcert podpisze automatycznie.
-
Skonfiguruj serwer programistyczny tak, aby używał protokołu HTTPS i certyfikatu utworzonego w kroku 2.
Możesz teraz uzyskać dostęp do https://{YOUR HOSTNAME} w przeglądarce bez ostrzeżeń
</div>
Uruchamianie witryny lokalnie przy użyciu protokołu HTTPS: inne opcje
Poniżej znajdziesz inne sposoby konfigurowania certyfikatu. Są one zwykle bardziej skomplikowane lub ryzykowne niż używanie mkcert.
Certyfikat podpisany samodzielnie
Możesz też zrezygnować z używania lokalnego urzędu certyfikacji, takiego jak mkcert, i samodzielnie podpisać certyfikat. Takie podejście ma kilka wad:
- Przeglądarki nie ufają Ci jako urzędowi certyfikacji, więc będą wyświetlać ostrzeżenia, które musisz ręcznie pominąć. W Chrome możesz użyć flagi
#allow-insecure-localhost, aby automatycznie pomijać to ostrzeżenie na urządzeniulocalhost. - Jest to niebezpieczne, jeśli pracujesz w niezabezpieczonej sieci.
- Niekoniecznie jest to łatwiejsze lub szybsze niż użycie lokalnego urzędu certyfikacji, takiego jak mkcert.
- Certyfikaty podpisane samodzielnie nie będą działać dokładnie tak samo jak certyfikaty zaufane.
- Jeśli nie używasz tej techniki w kontekście przeglądarki, musisz wyłączyć weryfikację certyfikatu na serwerze. Jeśli zapomnisz włączyć je ponownie w środowisku produkcyjnym, spowoduje to problemy z bezpieczeństwem.
Jeśli nie określisz certyfikatu, opcje HTTPS serwera deweloperskiego React i Vue utworzą certyfikat podpisany samodzielnie. Jest to szybkie rozwiązanie, ale wiąże się z tymi samymi ostrzeżeniami przeglądarki i innymi pułapkami certyfikatów podpisanych samodzielnie. Na szczęście możesz użyć wbudowanej opcji HTTPS we frameworkach frontendu i określić lokalnie zaufany certyfikat utworzony za pomocą mkcert lub podobnego narzędzia. Więcej informacji znajdziesz w przykładzie mkcert z React.
Jeśli otworzysz lokalnie działającą witrynę w przeglądarce za pomocą protokołu HTTPS, przeglądarka sprawdzi certyfikat lokalnego serwera deweloperskiego. Gdy zobaczy, że certyfikat został podpisany przez Ciebie, sprawdzi, czy jesteś zarejestrowany jako zaufany urząd certyfikacji. Ponieważ nie jesteś, przeglądarka nie może zaufać certyfikatowi i wyświetla ostrzeżenie, że połączenie nie jest bezpieczne. Jeśli przejdziesz dalej, połączenie HTTPS zostanie utworzone, ale robisz to na własne ryzyko.
Certyfikat podpisany przez zwykły urząd certyfikacji
Możesz też użyć certyfikatu podpisanego przez oficjalny urząd certyfikacji. Wiąże się to z tymi komplikacjami:
- Wymaga więcej pracy konfiguracyjnej niż w przypadku lokalnej techniki CA, takiej jak mkcert.
- Musisz użyć prawidłowej nazwy domeny, którą kontrolujesz. Oznacza to, że nie możesz używać oficjalnych urzędów certyfikacji do:
localhosti inne zastrzeżone nazwy domen, takie jakexamplelubtest.- Dowolna nazwa domeny, której nie kontrolujesz.
- Nieprawidłowe domeny najwyższego poziomu. Więcej informacji znajdziesz na liście prawidłowych domen najwyższego poziomu.
Odwrotny serwer proxy
Inną opcją uzyskania dostępu do witryny działającej lokalnie przez HTTPS jest użycie odwrotnego serwera proxy, takiego jak ngrok. Wiąże się to z następującymi zagrożeniami:
- Każdy, komu udostępnisz URL zwrotnego serwera proxy, może uzyskać dostęp do Twojej lokalnej witryny deweloperskiej. Może to być przydatne podczas prezentowania projektu klientom, ale może też umożliwić nieupoważnionym osobom udostępnianie informacji poufnych.
- Niektóre usługi odwrotnego serwera proxy pobierają opłaty za korzystanie, więc cena może być czynnikiem wpływającym na wybór usługi.
- Nowe środki bezpieczeństwa w przeglądarkach mogą wpływać na działanie tych narzędzi.
Oznacz (niezalecane)
Jeśli w Chrome używasz niestandardowej nazwy hosta, np. mysite.example, możesz użyć flagi, aby wymusić na przeglądarce uznanie nazwy mysite.example za bezpieczną. Unikaj tego z tych powodów:
- Musisz mieć całkowitą pewność, że adres
mysite.examplezawsze jest rozpoznawany jako adres lokalny. W przeciwnym razie ryzykujesz wyciek danych logowania do środowiska produkcyjnego. - Ta flaga działa tylko w Chrome, więc nie możesz debugować w różnych przeglądarkach.
Dziękujemy wszystkim recenzentom i współtwórcom za ich wkład i opinie, a w szczególności Ryanowi Sleeviemu, Filippowi Valsordzie, Milicy Mihajliji i Rowanowi Merewoodowi. 🙌