3 ting du skal huske når du kører SSL


Når du skal deploye SSL/TLS, så er der en hel del ting du skal have styr på, for at bliver helt optimalt. Vi vil i denne artikel belyse 3 vigtige ting, som du skal sikre.

HSTS

HSTS betyder HTTP Strict Transport Security. 

Et kendt og normalt anvendt angreb er blot at hijacke DNS og pege sitet uden SSL ind på en webserver med det formål at fiske information eller stjæle data. 

HSTS er en header du sender til brugerens browser, som fortæller den at den altid skal benytte HTTPS og derfor ikke må forsøge at tilgå sitet uden HTTPS. Det vil sige, at selv hvis brugeren skulle finde på at skrive http://www.ditsite.dk så vil browseren sørge for, at han loader HTTPS versionen med det samme.

Et andet glimrend eksempel er hvis dit site ikke altid har kørt HTTPS - så er der formentlig mange, som har et HTTP bookmark. Dvs. at de faktisk hver gang forsøger at tilgå siden via almindelig HTTP indtil de bliver viderestilt. 

Headeren ser ud således: 

 Strict-Transport-Security: max-age=31536000

Hvis du kører alt på dit domæne og subdomæner via HTTPS, så kan du inkludere alle subdomains i HSTS: 

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

Sådan sættes headeren

PHP

<?php
  header("Strict-Transport-Security: max-age=31536000; includeSubDomains");
?>

Apache (.htaccess eller direkte i konfiguration)

Header set Strict-Transport-Security "max-age=31536000; includeSubDomains"

nginx

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains"

Relative includes

Du har installeret SSL certifikatet, men hængelåsen dukker ikke op eller sitet ligner noget fra 90'erne og din browser brokker sig. Måske det lyder bekendt? Årsagen til dette er som regel at man inkluderer content fra et site der ikke kører HTTPS. Måden du undgår det på er naturligvis ved kun at bruge elementer der serveres via HTTPS. 

Det kan dog være en udfordring, hvis dit site serveres både via HTTP og HTTPS. I det tilfælde, så kan du benytte dig af "relative includes" hvor protokollen automatisk vil blive matchet med den du kører. Praktisk gøres det ved at undlade "http:" eller "https:"

Herunder et par eksempler: 

<script src="//code.jquery.com/jquery.js"></script>
<img src="//images.mysite.com/image.jpg" />

Vær opmærksom på, at det godt kan drille dig hvis du sidder og kigger i filer lokalt uden en webserver, da disse stier så vil referere til en fil.

Sikre cookies

Vidste du at cookies i udgangspunktet er ens for HTTP og HTTPS? Essentielt set vil det betyde, at en angriber, hvis han får brugeren til at kalde en HTTP url, kan overskrive de cookies som så bliver taget med ind i HTTPS miljøet. Du kan beskytte dig mod dette, ved at flagge dine cookies så de kun må transmiteres via SSL.

Husk, at hvis du benytter sessions med PHP, så kan du bruge session_set_cookie_params() til at bestemme parametre for din session cookie. Det er nemlig specielt denne du ønsker at sikre.