无需登录 数据私有 本地保存

HTTP公钥固定(HPKP)模拟演示 - 证书管理

54
0
0
0

HTTP公钥固定(HPKP)模拟演示 - 术语表

HPKP(HTTP Public Key Pinning)

HTTP公钥固定,是一种浏览器安全机制,允许网站通过HTTP响应头指定应信任的公钥指纹。首次访问时浏览器记录这些PIN值,后续访问时验证服务器证书链是否包含匹配的公钥。如果PIN不匹配,浏览器将中断连接。该标准于2015年在RFC 7469中定义,但已于2018年被主流浏览器废弃。

SPKI(Subject Public Key Info)

主题公钥信息,是X.509证书标准中用于存储公钥信息的数据结构。SPKI包含了公钥的算法标识和公钥数据本身。在HPKP中,浏览器会对SPKI结构进行SHA-256哈希运算得到PIN值。通过固定SPKI的哈希值,可以确保公钥本身不被替换,即使证书的其他部分(如颁发者、有效期等)发生变化。

PIN值(pin-sha256)

PIN值是公钥的SPKI结构经过SHA-256哈希运算后得到的Base64编码字符串。在HPKP响应头中以pin-sha256="base64value"的格式出现。浏览器缓存这些PIN值,并在后续连接中验证服务器证书链。一个有效的HPKP配置至少需要包含两个PIN值:当前证书的PIN和一个备份证书的PIN。PIN值的长度固定为44个Base64字符(对应32字节SHA-256哈希)。

max-age

max-age是指令HPKP策略的最大缓存时间,单位为秒。浏览器在收到HPKP头后会将PIN值缓存指定的时间。在此期间,浏览器会持续验证服务器的公钥。max-age过期后,浏览器将清除缓存的PIN值,等同于HPKP策略失效。建议从较短的值(如300秒)开始测试,确认无误后再设置为较长的时间(如15552000秒,即180天)。

includeSubDomains

includeSubDomains是指令HPKP策略是否应用于当前域名的所有子域名。例如,如果在example.com上设置了includeSubDomains,那么www.example.com、api.example.com等所有子域名都会受到该HPKP策略的约束。这在保护通配符证书时非常有用,但也意味着所有子域名都必须配置与HPKP PIN匹配的证书,否则将无法正常访问。

Report-Only

Report-Only是HPKP的非强制执行模式,使用Public-Key-Pins-Report-Only响应头代替Public-Key-Pins。在此模式下,浏览器仍然会记录和验证PIN值,但验证失败时不会阻断连接,而是仅发送违规报告。这允许网站管理员在不影响用户访问的情况下测试HPKP配置,收集违规数据,确认策略正确后再切换到强制执行模式。

违规报告(Violation Report)

当浏览器检测到HPKP验证失败(即服务器证书链中的公钥PIN与缓存的PIN不匹配)时,会向配置的report-uri地址发送一个JSON格式的违规报告。报告包含主机名、已知PIN值、服务器提供的证书链等信息。这些报告可用于监控中间人攻击、检测证书错误签发以及验证HPKP配置是否正确。报告格式在RFC 7469的第3节中有详细定义。

ECDSA P-256

ECDSA(Elliptic Curve Digital Signature Algorithm)是基于椭圆曲线密码学的数字签名算法。P-256是NIST定义的标准椭圆曲线参数之一,也称为secp256r1或prime256v1。该曲线提供约128位的安全强度,被广泛用于TLS证书、SSH密钥和其他安全协议中。在HPKP模拟演示中,使用ECDSA P-256生成密钥对可以模拟真实的Web服务器证书场景。

证书链(Certificate Chain)

证书链是验证服务器身份的信任路径,从服务器证书开始,经过一个或多个中间CA证书,最终到达根CA证书。在HPKP验证过程中,浏览器会检查证书链中所有证书的公钥PIN,只要其中任何一个匹配缓存的PIN值即认为验证通过。这就是为什么即使服务器证书更换,只要中间CA证书的PIN被固定,验证仍然可以通过。

证书透明度(Certificate Transparency)

证书透明度(CT)是一组用于监控和审计TLS证书签发的开放标准。CT要求所有公共CA将签发的证书记录到可公开审计的日志中。CT通过SCT(Signed Certificate Timestamp)机制确保证书被及时记录。CT已被Chrome等主流浏览器要求强制执行,被认为是HPKP的替代方案之一。与HPKP不同,CT侧重于检测错误签发,而非固定公钥。