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';