Apache - Public Key Pinning configureren
Let op: Google stopt vanaf eind maart 2018 met het ondersteunen van Public Key Pinning, in plaats hiervan kun je gebruik maken van CAA records.
HTTP Public Key Pinning (HPKP) vereist dat er een extra header meegezonden wordt naar de browser, waarin de hash van de public key van het certificaat is opgenomen. Daarnaast wordt er ook een hash van een nog niet bekende public key meegestuurd, zodat er bij een gecompromitteerd certificaat altijd nog een nieuwe kan worden aangevraagd.
Aanmaken backup Private Key
Via onderstaande opdracht wordt er een tweede CSR en private key aangemaakt, waarmee er indien nodig een nieuw certificaat aangevraagd kan worden. Let er op dat de gegevens gelijk zijn aan de gegevens van het actieve certificaat voor tenminste de Common Name en de bedrijfsnaam.
openssl req -out backup.csr -pubkey -new -keyout backup.key
Aanmaken hash van actieve public key
Met de onderstaande opdracht wordt er een SHA-256 hash gemaakt van de Public Key uit het actieve CSR van het certificaat.
openssl req -inform pem -pubkey -noout < actieve.csr \ | openssl pkey -pubin -outform der \ | openssl dgst -sha256 -binary \ | base64
Aanmaken hash van backup public key
Met de onderstaande opdracht wordt er een SHA-256 hash gemaakt van de Public Key uit het backup CSR voor een eventueel nieuw certificaat.
openssl req -inform pem -pubkey -noout < backup.csr \ | openssl pkey -pubin -outform der \ | openssl dgst -sha256 -binary \ | base64
HPKP header toevoegen aan configuratie
Activeren headers
Voeg onderstaande regel toe aan het configuratiebestand (/etc/apache2/httpd.conf) om de HTTP header functie te activeren:
LoadModule headers_module modules/mod_headers.so
Configureren headers per website
Stel per header de website in, het configuratie bestand staat bij een standaard configuratie in de directory /etc/apache2/sites-enabled/
.
Om op deze website de header voor HTTP Public Key Pinning in te stellen, moet onderstaande regel aan de HTTPS vhost configuratie worden toegevoegd:
<VirtualHost *:443> ... Header always set Public-Key-Pins 'max-age=60;pin-sha256="GRAH5Ex+kB4cCQi5gMU82urf+6kEgbVtzfCSkw55AGk=";pin-sha256="Dh46PQn5HIpXCusEb8G7YJsLzBSGAzNjgvsxeShjlv8="' ... </VirtualHost>
De toevoeging van de includeSubDomains optie zorgt er voor dat de browser nu voor alle subdomeinen van de website ook de HPKP header meestuurt. Het is aan te raden te beginnen met een kleine max-age van bijvoorbeeld 60 seconden, zodat bij een fout in de configuratie de website voor lange periode niet meer te bezoeken is. Wanneer de configuratie in orde is, kan de max-age worden verhoogd naar b.v. 15768000. Daarnaast is bij het gebruik van een wildcard certificaat het opnemen van de optie includeSubDomains achteraan de regel nodig.
Na het opnieuw laden van de Apache configuratie wordt voor elke bezoeker de header ingesteld. Let op: deze configuratieregel wordt alleen in de HTTPS (:443) website configuratie opgenomen en niet in de HTTP (:80) versie.
Hulp nodig?
Bel ons op +31 88 775 775 0
SSLCheck
De SSLCheck controleert of je certificaat goed op je server is geïnstalleerd en of er mogelijke problemen zijn.