IIS - 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.

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. Dit vereist dat OpenSSL is geïnstalleerd op de machine waar dit commando op wordt uitgevoerd.

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 > hash.bin | certutil -encode hash.bin hash.b64

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 > hash.bin | certutil -encode hash.bin hash.b64

Configureren HPKP headers per website

    1. Open de Internet Information Services (IIS) Manager via StartAdministrative ToolsIIS Manager.

      Public Key Pinning met IIS

    2. Klik op HTTP Response Headers.
    3. Klik op Add... in het Actions paneel.

      Public Key Pinning met IIS

    4. Stel volgende waarden in de Add Custom HTTP Response Headers dialog box in:
      Naam: Public-Key-Pins
      Waarde: <zie hieronder>
      De waarde die opgegeven moet worden is de max-age voor zo lang als de header moet gelden, en de resulaten van beide OpenSSL opdrachten. Zie het voorbeeld hieronder:
      max-age=60;pin-sha256="GRAH5Ex+kB4cCQi5gMU82urf+6kEgbVtzfCSkw55AGk=";pin-sha256="Dh46PQn5HIpXCusEb8G7YJsLzBSGAzNjgvsxeShjlv8="
    5. Sluit na bevestiging de IIS Manager.

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 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.

point up