HTTP Public Key Pinning (HPKP) ist ein Mechanismus zum Absichern des HTTPS-Protokolls gegen Man-in-the-Middle-Angriffe mit gefälschten, jedoch von einer anerkannten Zertifizierungsstelle (certificate authority) signierten Zertifikaten. HPKP ermöglicht die Einschränkungen der für eine Domain akzeptierten Zertifikate auf Basis des trust-on-first-use-Prinzips. Eine Liste gültiger Zertifikate wird mittels des HTTP Header Public-Key-Pins vom Server mit einer beschränkten Gültigkeit definiert und vom Webbrowser des Nutzers gespeichert, um diese bei einem zukünftigen Zugriff zur Überprüfung des Zertifikates zu nutzen.
Die Liste gültiger Zertifikate kann dabei jedes Zertifikat der Schlüsselhierarchie enthalten. Es ist somit möglich, sowohl End-Zertifikate für die spezifische Domain als auch Zertifikate von Zertifizierungsstellen als gültig zu definieren. Durch letzteres wird jedes von dieser Zertifizierungsstelle signierte Zertifikat akzeptiert.[1] Dabei muss die Liste gültiger Zertifikate sowohl mindestens ein Zertifikat enthalten, das genutzt wird, als auch mindestens ein Zertifikat, das derzeit nicht in Nutzung ist. Letzteres dient als Backup-Zertifikat, um die Gefahr eines vollständigen Verlustes aller als gültig definierten Zertifikate zu reduzieren.[2]
HTTP Public Key Pinning wurde von Google im November 2011 vorgeschlagen und ist als RFC 7469 standardisiert.[3]
Chrome unterstützt HPKP seit Oktober 2015 (Version 46),[4] hat es mit der Version 68 jedoch als „abgekündigt“ (deprecated) definiert und entfernte dessen Unterstützung mit der Version 72[5] wieder. Firefox unterstützte HPKP seit Januar 2015 (Version 35), entfernte die Unterstützung jedoch im Januar 2020 mit Version 72.[6] Safari und Edge unterstützten HPKP im Gegensatz zu Opera nicht.[7]
Im Oktober 2017 regte Chris Palmer, Mitautor des HPKP-Standards und Mitarbeiter bei Google Chrome, an, die Unterstützung des Standards im Chrome Browser ab Version 67, die für Mai 2018 erwartet wird, als veraltet zu markieren und vollständig zu entfernen, sobald Certificate Transparency im Chrome Browser für alle Zertifikate verpflichtend wird. Die Nutzung des Standards sei gering geblieben. Einen Grund hierfür sieht Palmer in der schwierigen Auswahl einer Liste gültiger Zertifikate, da der Website-Betreiber nicht über alle damit zusammenhängenden Aspekte die Kontrolle habe, sondern diese auch von den Herstellern der Betriebssysteme und Browser, sowie den Zertifizierungsstellen abhängig sei. Insbesondere besteht die Gefahr, durch HPKP eine Website unbenutzbar zu machen – auch für Websites, die dieses selbst gar nicht einsetzen.[8]
Die Technik des TLS-Zertifikat-Pinning im Browser per HPKP ist gescheitert und wieder ausgebaut worden (vgl. Kapitel Geschichte), aber das TLS-Zertifikat-Pinning in einer App auf einen mobilen Betriebssystem wie bspw. Android oder iOS ist praktikabel, da im Notfall ein Update des Zertifikates über den Update-Mechanismus des App-Stores erfolgen kann und entsprechende Betriebssystemschnittstellen bereitgestellt werden.[9]