HSTS - HTTP Strict Transport Security

Czym jest HSTS?

HSTS zwiększa bezpieczeństwo połączeń SSL poprzez wyeliminowanie połączeń nieszyfrowanych. Oczywiście, serwis internetowy, który chce wdrożyć HSTS musi już posiadać poprawny i zainstalowany certyfikat SSL. Ustawienie nagłówka Strict-Transport-Security (HSTS) w serwerze wymusza w przeglądarce klienta używanie tylko połączeń SSL. Jednocześnie zmniejsza ataki na serwis poprzez metodę Man in the Middle (MitM), czyli uniemożliwia zmodyfikowanie zaszyfrowanej transmisji.

Jak to działa?

Przy pierwszej wizycie w połączeniu SSL (HTTPS) przeglądarka sprawdza, czy serwer internetowy w opowiedzi wysyła nagłówek Strict-Transport-Security. Jeżeli tak, to przeglądarka zapamiętuje fakt, iż każde kolejne połączenie z serwisem www musi odbywać się tylko w połączeniu SSL (HTTPS). To, jak długo przeglądarka będzie pamiętała o przekierowaniu ruchu z HTTP na HTTS zależy to od parametru max-age, który jest podawany w sekundach (na poniższym przykładzie: 1 rok)

Konfiguracja w nginx

server {
  listen 443 ssl spdy;
  server_name moja-domena.pl;
  add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";

Konfiguracja w Apache'u

<VirtualHost 1.2.3.4:443>
  Header set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</VirtualHost>


Jak sprawdzić poprawność konfiguracji nagłówka HSTS?

curl -si https://www.moja-domena.pl | grep ^Strict

Jeżeli w odpowiedzi zobaczymy nagłówek Strict-Transport-Security oznacza to poprawną konfigurację HSTS po stronie serwera.

Strict-Transport-Security: max-age=31536000; includeSubDomains

Przeglądarki obsługujące HSTS

Przeglądarki nieobsługujące HSTS