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

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

51
0
0
0

HTTP公钥固定(HPKP)模拟演示 - 使用教程

在开始使用本工具之前,建议先了解HPKP的基本概念。HPKP(HTTP Public Key Pinning)是浏览器实现的一种安全机制,网站通过Public-Key-Pins响应头告知浏览器应该信任哪些公钥。

HPKP的核心思想是"公钥固定":浏览器首次访问网站时记住其公钥指纹,后续访问时验证服务器证书链中是否包含这些指纹。如果指纹不匹配,说明可能发生了中间人攻击或证书被替换,浏览器将拒绝连接。

重要提示:HPKP已于2018年被主流浏览器废弃。本工具主要用于教育和研究目的,帮助理解公钥固定的安全理念。在实际项目中,请考虑使用Expect-CT或Certificate Transparency作为替代方案。

HPKP头的格式如下:

Public-Key-Pins: pin-sha256="base64_primary=="; pin-sha256="base64_backup=="; max-age=5184000; includeSubDomains; report-uri="https://example.com/hpkp-report"

其中pin-sha256是公钥的SPKI SHA-256哈希值的Base64编码,max-age是PIN的缓存时间(秒),includeSubDomains表示策略是否应用于子域名,report-uri是违规报告的接收地址。

点击页面上的"生成密钥对"按钮,工具将使用Web Crypto API在浏览器端生成一个ECDSA P-256密钥对。ECDSA(椭圆曲线数字签名算法)是目前最安全的公钥密码算法之一,P-256是NIST定义的标准椭圆曲线。

生成过程完全在浏览器端完成,密钥数据不会上传到任何服务器。这保证了密钥的安全性,也方便用户在离线环境中使用本工具。

密钥生成的技术细节:
  • 使用浏览器原生crypto.subtle.generateKey API
  • 曲线参数为P-256(也称为secp256r1或prime256v1)
  • 生成的密钥对包含公钥和私钥,私钥用于模拟证书签名
  • 公钥会被导出为SPKI格式的ArrayBuffer

建议一次生成至少2个密钥对:一个模拟当前服务器证书的公钥,另一个模拟备份证书的公钥。这是HPKP的最佳实践——始终保留至少一个备份PIN值,以防当前证书密钥泄露或需要更换。

密钥对生成后,工具会自动计算并显示每个公钥的SPKI SHA-256 PIN值。PIN值的计算过程包括:

  1. 从ECDSA公钥中提取原始公钥字节(65字节非压缩格式)
  2. 将公钥字节包装为SPKI ASN.1结构
  3. 对完整的SPKI字节序列进行SHA-256哈希运算
  4. 将32字节的哈希结果进行Base64编码

SPKI(Subject Public Key Info)是X.509证书中存储公钥信息的标准格式。通过固定SPKI的哈希值,可以确保证书链中使用的公钥没有被篡改,即使证书本身被替换。

示例PIN值格式:
pin-sha256="YEQK4tMHDm3S7NVpUVK0fJ3x6UvL+9C0r0z7fHk8xWs="

请妥善记录这些PIN值,它们将用于构建HPKP响应头。如果使用了includeSubDomains指令,这些PIN将应用于所有子域名。

在配置面板中,您可以调整以下HPKP参数:

max-age设置

max-age指令指定PIN值的缓存时间(秒)。建议从较短的时间(如300秒)开始测试,确认配置正确后再逐步增加到生产级别(通常为15-180天)。如果在max-age过期前未能续期PIN,浏览器会清除缓存,相当于HPKP策略失效。

includeSubDomains开关

启用此选项后,HPKP策略将应用于当前域名及其所有子域名。这在保护通配符证书时非常有用,但也增加了误配置的风险。例如,如果主站配置了HPKP但子站没有相应配置证书,子站将无法正常访问。

Report-Only模式

推荐在正式部署前使用Report-Only模式(Public-Key-Pins-Report-Only头)。在此模式下,浏览器只会发送违规报告而不会实际阻止连接,这允许您在不影响用户访问的情况下收集验证数据。

report-uri配置

指定违规报告的接收地址。当浏览器检测到PIN不匹配时,会向此地址发送JSON格式的报告。许多安全服务提供商(如Report-URI、CSP等)提供免费的报告接收服务。

配置完成后,点击"模拟验证"按钮,选择不同的验证场景来查看浏览器的响应行为:

场景服务器证书浏览器行为
正常验证包含已固定的PIN正常加载,绿色提示
备份PIN验证仅备份PIN匹配加载成功,黄色提示
伪造证书所有PIN均不匹配阻断连接,红色警告
首次访问无缓存PIN记录PIN,正常加载
缓存过期PIN已过期重新记录PIN

每个场景的模拟结果都包含详细的浏览器内部处理流程说明,帮助您深入理解HPKP的验证逻辑。

当模拟验证失败时,工具会自动生成一个符合RFC 7469标准的违规报告JSON数据。这个报告通常由浏览器自动发送到配置的report-uri地址。

违规报告包含以下关键信息:

  • hostname:发生违规的网站域名
  • includeSubDomains:是否启用了子域名包含
  • noted-hostname:最初记录PIN值的主机名
  • served-certificate-chain:服务器实际提供的证书链
  • known-pins:浏览器缓存中已知的PIN值列表

通过分析这些报告,网站管理员可以了解HPKP策略是否正确配置,以及是否存在潜在的安全威胁。在实际生产环境中,建议将这些报告集成到安全监控系统中。

提示:本工具生成的违规报告JSON数据可以直接用于开发和测试违规报告接收端点。复制JSON数据并发送到您的报告接收服务即可验证报告处理逻辑。