HTTP Public Key Pinning (HPKP)

Das HTTP Public Key Pinning (HPKP) mit Lets Encrypt wird sehr gut auf re{raise}ace.eu erklärt. Ergänzend dazu, möchte ich hier noch die Parameter und die notwendigen Schritte ergänzen:

Für HPKP werden zuerst die beiden Intermediate Certificates unter https://letsencrypt.org/certificates/ mit wget heruntergeladen.

# Active Let’s Encrypt Authority X3 (IdenTrust cross-signed)
wget https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem.txt
# Backup Let’s Encrypt Authority X4 (IdenTrust cross-signed)
wget https://letsencrypt.org/certs/lets-encrypt-x4-cross-signed.pem.txt

Der für HPKP benötigte Schlüssel wird aus dem jeweiligen Zertifikat mit den nachfolgenden Befehlen ausgelesen.

# Active Let’s Encrypt Authority X3 (IdenTrust cross-signed)
openssl x509 -noout -in lets-encrypt-x3-cross-signed.pem.txt -pubkey | \
openssl rsa -pubin -outform der | \
openssl dgst -sha256 -binary | \
base64

# As single line command for copy & paste & use
openssl x509 -noout -in lets-encrypt-x3-cross-signed.pem.txt -pubkey | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | base64

Die beiden Schlüssel werden schließlich mit dem folgenden Befehl in der "nginx.conf" oder einem Server unter "/etc/nginx/sites-available" angepinnt.

add_header Public-Key-Pins 'pin-sha256="YLh1dUR9y6Kja30RrAn7JKnbQG/uEtLMkBgFF2Fuihg="; pin-sha256="sRHdihwgkaib1P1gxX8HFszlD+7/gTfNvuAybgLPNis="; max-age=5184000; includeSubDomains';

Quellen

re{raise}ace.eu

Hugo Barrera