De afgelopen weken krijgen we regelmatig vragen over HSTS, en hoe je dit inschakelt voor een website. HSTS staat voor "HTTP Strict Transport Security" en verbetert de SSL beveiliging van een site. In deze blogpost leg ik uit wat HSTS precies is, wat het nut er van is, en hoe je het zelf voor je eigen site kunt inschakelen.

Wat is SSL?
Voordat we het over HSTS gaan hebben, moeten we het eerst kort over SSL hebben. Zoals je wellicht weet, zorgt SSL dat het verkeer tussen de server en de bezoeker van een website versleuteld is. Derden kunnen dit verkeer dan niet inzien of wijzigen. Een SSL verbinding herken je aan het slotje in de adresbalk van je browser, en aan de s in https:// aan het begin van het adres.

Waarom is alleen SSL niet genoeg?
Na het inschakelen van SSL is het standaard zo dat je website dan zowel via het veilige https://, maar ook nog via het onveilig http:// bereikbaar is. Het zou dus voor kunnen komen dat een bezoeker je website nog via het onveilige http:// opvraagt. Verkeer kan dan per ongeluk nog onversleuteld het internet over gaan, waardoor deze gegevens wel kunnen worden afgeluisterd. Hackers kunnen hier ook moedwillig misbruik van maken door een "downgrade attack" uit te voeren op een bezoeker. Ze laten de bezoeker dan eventjes via http:// naar een website gaan, zodat ze bepaalde data (zoals logingegevens of cookies) kunnen stelen.

Hoe HSTS het gebruik van het onveilige http:// kan blokkeren
Door HSTS in te schakelen van je website, maak je het onmogelijk dat een website nog via http:// kan worden bezocht.  HSTS vertelt de browser van een bezoeker via een speciale instructie (in een HTTP header) dat een domeinnaam alleen nog via https:// bezocht mag worden. De browser van de bezoeker zal de instructie onthouden, en voortaan alleen nog deze website via https:// opvragen.

Instelopties voor HSTS
Behalve het verplichten van https://, kent HSTS ook een aantal instelopties:

  1. max-age - Dit is een waarde in seconden. Je kunt hiermee aangeven hoe lang een browser van een bezoeker moet onthouden dat deze website alleen via https:// mag worden bezocht. Normaal gesproken wordt deze waarde op 63072000 ingesteld, wat staat voor 2 jaar.

    Het is aan raden om eerst een lagere waarde te kiezen, zodat je kunt testen of alles goed werkt - bijvoorbeeld 300 (= 5 minuten).
  2. includeSubDomain - Hiermee geef je aan dat HSTS ook moet gelden voor alle subdomeinen van een domeinnaam. Hier valt ook het www. subdomein onder. Normaal gesproken wordt deze optie ingesteld.
  3. preload - Chrome houdt een lijst bij met alle websites die alleen via https:// mogen worden bezocht, en deze centrale lijst wordt door alle populaire browsers gebruikt. Hiermee hoeft de browser van elke bezoeker dit niet meer individueel te checken en op te slaan, en zo wordt zelfs de allereerste opvraag van elke bezoeker beveiligd. Het toevoegen van de "preload" optie geeft je de mogelijkheid om je aan te melden voor deze lijst, waarover ik later meer vertel.

Hoe stel ik HSTS in voor mijn website?

Voordat je HSTS instelt, is het belangrijk om eerst te controleren of je website via https:// te bezoeken is en dat er geen waarschuwing bij het slotje staat in de adresbalk (een uitroeptekentje). Mocht https:// namelijk nog niet goed werken, dan zorgt het inschakelen van HSTS ervoor dat je website onbereikbaar wordt.

Als https:// goed werkt voor je website, dan kun je HSTS omstellen door door een regel toe te voegen aan het .htaccess bestand in de public_html map van je website. Deze regel kun je bovenaan in dit bestand plaatsen:

Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"

Let er dus op dat je met de bovenstaande regel HSTS gelijk voor de periode van 2 jaar instelt. Het is verstandig om altijd met een lagere waarde te beginnen en te testen, zoals 300 (= 5 minuten) in plaats van 63072000 (= 2 jaar).

Verder is het nodig dat je al het verkeer automatisch doorlinkt naar https://, mocht een bezoeker nog via http:// binnenkomen. Mocht dit nog niet automatisch voor jouw websie gebeuren, dan kun je dit instellen door de onderstaande rewrite-rules in hetzelfde .htaccess bestand op te nemen. Deze rules kun je dan onder de bovenstaande HSTS header toevoegen.

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Aanmelden voor de HSTS preloadlijst
Nadat je HSTS met succes hebt ingesteld, en als je dan vervolgens je website ook wilt aanmelden voor de HSTS preloadlijst, dan kun je dit doen op:

https://hstspreload.org/

Om je te kunnen aanmelden, zijn er een aantal vereisten waar hstspreload.org op checkt voordat je website aan de lijst kan worden toegevoerd:

  • Je website moet een geldig SSL certificaat hebben - hier zorgen wij voor als je bij ons host
  • Je moet de HSTS header op de juiste manier hebben geinstalleerd
  • De max-age instelling moet minimaal op 3153600 (= 1 jaar) staan
  • De includeSubDomains optie moet zijn ingesteld
  • De preload optie moet zijn ingesteld
  • Al het verkeer naar http:// moet worden geredirect naar https:// - voordat je eventuele andere redirects doet