Jak skonfigurować HSTS dla domeny? To pytanie wraca wszędzie tam, gdzie priorytetem jest bezpieczeństwo, wydajność i SEO. Jeśli chcesz, by Twoja witryna była ładowana wyłącznie przez HTTPS, a przeglądarki twardo egzekwowały to wymaganie, nagłówek HSTS jest jednym z najprostszych i najskuteczniejszych sposobów. Poniżej znajdziesz praktyczny przewodnik z krokami, przykładami i pułapkami, które warto znać, zanim włączysz tę politykę na produkcji.
Czym jest HSTS i dlaczego warto?
HSTS to dyrektywa w nagłówku HTTP, która mówi przeglądarce: “Łącz się z tą domeną tylko po HTTPS”.
HSTS (HTTP Strict Transport Security) to mechanizm bezpieczeństwa definiowany w RFC 6797. Działa po stronie przeglądarki: jeśli strona zwróci nagłówek Strict-Transport-Security, przeglądarka zapamięta politykę i przy kolejnych wizytach automatycznie wymusi połączenie szyfrowane.
Co to daje w praktyce:
- Chroni przed atakami typu SSL stripping i man-in-the-middle.
- Minimalizuje ryzyko przypadkowego łączenia się po HTTP.
- Może poprawić Core Web Vitals i SEO (mniej przekierowań, spójne adresy).
- Upraszcza politykę linkowania (nie martwisz się, że ktoś doda http:// przez pomyłkę).
Jak wygląda przykładowy nagłówek:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Najważniejsze elementy:
- max-age: czas w sekundach, przez jaki przeglądarka ma pamiętać politykę (np. 31536000 = 1 rok).
- includeSubDomains: obejmuje wszystkie subdomeny (np. blog.twojadomena.pl).
- preload: zgoda na dodanie domeny do listy preloading w przeglądarkach (więcej o tym niżej).
Warunki wstępne i najczęstsze pułapki
Zadbaj o poprawny HTTPS wszędzie, zanim włączysz HSTS z includeSubDomains i preload.
Zanim wdrożysz HSTS:
- Upewnij się, że certyfikat SSL/TLS jest ważny, obejmuje domenę i subdomeny (jeśli planujesz includeSubDomains) i jest automatycznie odnawiany.
- Włącz stałe przekierowanie 301 z HTTP do HTTPS dla całej domeny.
- Usuń mixed content (zasoby po HTTP osadzone na stronach HTTPS).
- Zidentyfikuj subdomeny, które nie powinny lub nie mogą działać po HTTPS (np. stare systemy, niestandardowe porty, niektóre usługi mailowe). includeSubDomains zablokuje je użytkownikom przeglądarek wspierających HSTS.
- Nie spiesz się z preload, jeśli nie masz pewności, że wszystkie subdomeny obsługują HTTPS. Z preloadingiem prawie nie ma odwrotu.
Typowe błędy:
- Zbyt długi max-age na starcie (zablokujesz sobie drogę odwrotu).
- Brak nagłówka na wersji www lub apex (bez “preload” nie spełnisz wymagań listy).
- Wysyłanie HSTS po HTTP (przeglądarki to ignorują; nagłówek ma sens tylko po HTTPS).
- Dodanie “preload” przed testami (ryzyko trwałych problemów).
Jak skonfigurować HSTS dla domeny? — przewodnik krok po kroku
Najpierw test na krótkim max-age, dopiero potem pełna produkcja z includeSubDomains i preload.
Krok 1. Wybierz bezpieczny max-age na start
- Zacznij od 300–86400 sekund (5 minut do 1 dnia) na środowisku testowym lub ograniczonym ruchu.
- Jeśli wszystko działa, podnieś do 15552000 (180 dni) lub 31536000 (1 rok).
- W praktyce standardem jest 31536000.
Krok 2. Zdecyduj o includeSubDomains i preload
- includeSubDomains włączaj tylko, gdy wszystkie subdomeny są gotowe na HTTPS.
- preload włącz dopiero, gdy masz: 1) max-age ≥ 31536000, 2) includeSubDomains, 3) preload w nagłówku, 4) stałe przekierowanie z HTTP do HTTPS dla całej domeny i subdomen, 5) poprawne certyfikaty.
Krok 3. Wdrażaj stopniowo
- Włącz najpierw bez includeSubDomains i preload.
- Sprawdź logi błędów, raporty monitoringu, narzędzia typu securityheaders.com.
- Po kilku dniach bez problemów – dodaj includeSubDomains.
- Po kolejnych testach – rozważ preload.
Krok 4. Konfiguracja na serwerze lub w CDN
Poniżej przykładowe ustawienia. Zastosuj je tylko na HTTPS.
-
Nginx (w bloku server dla 443):
add_header Strict-Transport-Security “max-age=31536000; includeSubDomains; preload” always;Uwaga: “always” sprawia, że nagłówek będzie dodany także na odpowiedzi 4xx/5xx.
-
Apache (httpd.conf lub .htaccess, VirtualHost na 443):
Header always set Strict-Transport-Security “max-age=31536000; includeSubDomains; preload”Upewnij się, że moduł headers jest włączony (LoadModule headers_module modules/mod_headers.so).
-
Cloudflare (Transform Rules lub Zarządzanie nagłówkami; ewentualnie Strict-Transport-Security w ustawieniach SSL/TLS):
Ustaw “Always Use HTTPS” i włącz HSTS z odpowiednim max-age, includeSubDomains, preload.
Dodatkowo skonfiguruj “Automatic HTTPS Rewrites”, aby zredukować mixed content. -
IIS (web.config w witrynie HTTPS):
W sekcji <system.webServer><httpProtocol><customHeaders> dodaj:
<add name=“Strict-Transport-Security” value=“max-age=31536000; includeSubDomains; preload” /> -
Aplikacje (np. Express.js, Django, Laravel):
Użyj middleware: helmet.hsts w Node.js, SecurityMiddleware w Django, pakietów do nagłówków w Laravel.
Upewnij się, że serwer brzegowy (reverse proxy/CDN) nie nadpisuje nagłówka.
Testowanie i weryfikacja
Sprawdź nagłówek lokalnie, zewnętrznie i w różnych przeglądarkach.
-
curl (szybka weryfikacja):
curl -s -D- https://twojadomena.pl -o /dev/null | grep -i strict-transport-security -
Nagłówki i oceny bezpieczeństwa:
- securityheaders.com
- Observatory by Mozilla
- ssllabs.com/ssltest (certyfikat i konfiguracja TLS)
-
Przeglądarki i cache:
- Pamiętaj, że HSTS jest cache’owany w profilu przeglądarki.
- Testuj w czystym profilu/trybie prywatnym i na innym urządzeniu.
- Jeśli używasz CDN, odczekaj na propagację i wyczyść cache.
Preload: kiedy, jak i czego się wystrzegać
Preload to “twardy” tryb HSTS — przeglądarki wymuszają HTTPS, nawet przy pierwszej wizycie.
Zwykły HSTS wymaga przynajmniej jednej wizyty po HTTPS, aby przeglądarka zapisała politykę. Preload eliminuje ten warunek: domena trafia do wbudowanej listy w przeglądarkach i od razu wymusza HTTPS.
Aby zakwalifikować domenę:
- Nagłówek na apex i wszystkich subdomenach: max-age ≥ 31536000, includeSubDomains, preload.
- Stałe przekierowanie 301 z HTTP do HTTPS dla całej domeny.
- Brak wyjątków (np. subdomena po HTTP).
- Zgłoszenie w hstspreload.org i pozytywna weryfikacja.
Uwaga praktyczna:
- Dodanie do listy trwa, a usunięcie jest trudne i powolne.
- Jeśli chociaż jedna subdomena nie może działać po HTTPS, nie używaj preload.
- Najpierw zakończ pełną migrację do HTTPS (w tym systemy wewnętrzne, jeśli są publicznie dostępne).
Cofanie lub zmiana ustawień HSTS
Raz ustawiony długi max-age będzie respektowany do jego wygaśnięcia — zmiany działają z opóźnieniem.
Co zrobić, gdy chcesz złagodzić politykę:
- Zmień max-age na mniejszy (np. z 31536000 na 300) i odczekaj, aż większość użytkowników odświeży politykę.
- Aby wyłączyć HSTS, ustaw max-age=0 (przeglądarki usuną politykę przy kolejnej wizycie po HTTPS).
- Jeśli domena jest na preload liście, złagodzenie lokalne nie wystarczy — musisz zgłosić prośbę o usunięcie w hstspreload.org (to może trwać tygodnie).
Dobre praktyki:
- Zanim podniesiesz max-age do 1 roku, utrzymuj HSTS przez kilka tygodni na krótszym TTL.
- Dokumentuj zmiany i powiadamiaj zespoły odpowiedzialne za subdomeny i usługi.
Praktyczne porady i dobre praktyki
HSTS jest proste w konfiguracji, ale wymaga dyscypliny w utrzymaniu.
- Środowiska testowe i staging: nie dodawaj ich do preload i nie używaj includeSubDomains, jeśli współdzielą domenę z produkcją. Najlepiej używaj osobnych domen testowych.
- Automatyzacja: połącz odnowienia certyfikatów (np. ACME/Let’s Encrypt) z monitoringiem HSTS i testami po wdrożeniu.
- Monitoring: skonfiguruj alerty na brak lub zmianę nagłówka Strict-Transport-Security.
- Mixed content: rozważ Content-Security-Policy z upgrade-insecure-requests, aby automatycznie podnosić zasoby HTTP do HTTPS.
- SEO: ustaw kanoniczne adresy na wersję HTTPS, w Google Search Console dodaj właściwość HTTPS.
- CDN i reverse proxy: upewnij się, że HSTS nie jest usuwany po drodze.
- Zgodność: sprawdź, czy serwisy legacy (np. stare subdomeny, zasoby plikowe) nie wymagają HTTP. Jeśli tak — nie używaj includeSubDomains ani preload, dopóki nie zmodernizujesz tych usług.
- Wielodomenowość: dla domen międzynarodowych (np. .pl, .com) skonfiguruj HSTS osobno i testuj każdą.
- E-maile i MTA-STS: pamiętaj, że HSTS dotyczy HTTP(S), a nie SMTP. Dla poczty rozważ MTA-STS, TLS-RPT i DANE.
FAQ: szybkie odpowiedzi
Krótko i na temat — najczęstsze pytania o HSTS.
-
Czy mogę dodać HSTS tylko na części serwisu?
Technicznie tak, ale to słabe podejście. HSTS powinien obowiązywać całą domenę. Przeglądarki reagują na bazie domeny, nie pojedynczych ścieżek. -
Czy HSTS działa, gdy ktoś wpisze http:// przed pierwszą wizytą?
Nie, chyba że domena jest na liście preload. Inaczej pierwszy kontakt może iść po HTTP, a dopiero potem HSTS zadziała. -
Jak szybko działa zmiana nagłówka?
Zależy od max-age zapisanej w przeglądarce użytkownika. Zmiany nie są natychmiastowe. Dlatego warto testować na krótkim TTL. -
Jak wyłączyć HSTS?
Ustaw max-age=0 i poczekaj, aż użytkownicy odświeżą politykę. Jeśli jesteś na preload, zgłoś usunięcie w hstspreload.org. -
Jaki max-age jest zalecany?
Docelowo 31536000 (1 rok). Na start wybierz niższy (np. 1 dzień), obserwuj i stopniowo podnoś. -
Czy konieczne jest includeSubDomains?
Nie, ale to najlepsza ochrona, jeśli WSZYSTKIE subdomeny są gotowe na HTTPS. W przeciwnym razie możesz zablokować dostęp do części usług. -
Czy HSTS wpływa na wydajność?
Pozytywnie — przeglądarka pomija krok HTTP i od razu łączy się przez HTTPS, redukując liczbę przekierowań. -
Co z serwerami API i klientami niestrumieniowymi?
Przeglądarki respektują HSTS. Klienci API i narzędzia CLI nie zawsze. Po stronie serwera nadal wymuszaj HTTPS i blokuj HTTP.
Podsumowanie i rekomendowany schemat wdrożenia
Testuj krótko, wdrażaj świadomie, a na końcu włącz includeSubDomains i preload.
Rekomendowany plan:
- Krok 1: Napraw mixed content, włącz 301 z HTTP do HTTPS, sprawdź certyfikaty na wszystkich subdomenach.
- Krok 2: Włącz HSTS z krótkim max-age bez includeSubDomains i bez preload.
- Krok 3: Monitoruj i testuj. Jeśli jest stabilnie — podnieś max-age do 31536000.
- Krok 4: Dodaj includeSubDomains, przetestuj subdomeny.
- Krok 5: Jeśli cała domena jest gotowa — dodaj preload i zgłoś domenę na hstspreload.org.
Wdrażając te kroki, zyskasz silne bezpieczeństwo na poziomie transportu, mniejszą liczbę błędów związanych z protokołem i spójny, nowoczesny profil witryny w oczach użytkowników i wyszukiwarek. Zrób to raz, ale porządnie — i pamiętaj o utrzymaniu oraz monitoringu, bo to one decydują, czy HSTS będzie Twoim sprzymierzeńcem, a nie źródłem niespodzianek.