HTTP公钥固定(HPKP)模拟演示 - 功能特性
本工具使用Web Crypto API在浏览器端生成ECDSA P-256椭圆曲线密钥对。ECDSA P-256是目前最广泛使用的椭圆曲线算法之一,具有安全性高、性能优异的特点。生成的密钥对可用于模拟真实的HPKP场景,帮助用户理解公钥固定的实际操作流程。
// 通过Web Crypto API生成ECDSA P-256密钥对
const keyPair = await crypto.subtle.generateKey(
{ name: "ECDSA", namedCurve: "P-256" },
true, ["sign", "verify"]
);
密钥对生成后,工具会自动提取公钥的SPKI字节序列,并对其进行SHA-256哈希运算,得到用于HPKP头的PIN值。整个过程完全在浏览器端完成,无需服务器参与。
SPKI(Subject Public Key Info)PIN是HPKP的核心要素。本工具能够自动从生成的公钥中提取SPKI信息,并使用SHA-256算法计算出Base64编码的PIN值。这个PIN值会被放入HPKP响应头中,供浏览器验证使用。
1. 从ECDSA公钥中提取原始字节
2. 构建SPKI ASN.1结构
3. 对SPKI字节进行SHA-256哈希
4. 将哈希结果进行Base64编码
用户可以一次性生成多个密钥对(最多10个),模拟包含当前证书PIN和备份证书PIN的完整HPKP配置。每个PIN值都会以pin-sha256="..."的格式显示在构建好的HPKP头中。
基于用户生成的PIN值和配置参数,本工具能够自动构建完整的HPKP HTTP响应头。构建的响应头严格遵循RFC 7469标准格式,包含所有必要的指令和参数。
用户可以自由配置以下参数:
- max-age:PIN的缓存时间,支持从60秒到365天的多种预设值
- includeSubDomains:是否将HPKP策略应用到所有子域名
- report-uri:违规报告的接收地址
- Report-Only:是否仅用于报告而不强制执行
构建好的响应头会以语法高亮的方式显示,方便用户复制到服务器配置中使用。同时提供Apache、Nginx、Node.js等常见服务器的配置示例。
本工具最大的亮点之一是能够模拟浏览器对HPKP策略的验证过程。用户可以选择不同的验证场景,直观地看到浏览器在各种情况下如何响应:
每种场景都配有详细的解释说明,帮助用户理解浏览器内部的验证逻辑和决策过程。
当浏览器检测到HPKP策略违规时,会向配置的report-uri地址发送一个JSON格式的违规报告。本工具能够生成符合RFC 7469规定的标准违规报告JSON数据,包括以下字段:
hostname:违规发生的主机名includeSubDomains:是否包含子域名noted-hostname:被记录的主机名served-certificate-chain:服务器提供的证书链known-pins:已知的PIN值列表
生成的JSON报告会以格式化的方式展示,方便开发者用于后端日志系统的开发和测试。同时提供多个流行的违规报告接收服务配置示例。
为了简化操作流程,本工具提供了一键生成功能和多种预设配置方案:
一键生成全部密钥
点击"一键生成"按钮,工具会自动创建2-10个ECDSA P-256密钥对,分别模拟当前证书和备份证书。每个密钥对都会自动计算SPKI PIN值,并按照HPKP标准格式排列。
max-age预设方案
提供从60秒到365天的多种max-age预设值,包括:
- 60秒/5分钟/1小时 - 测试和调试用
- 1天/7天/30天 - 短期部署
- 90天/180天/365天 - 长期生产部署
Report-Only模式
提供Public-Key-Pins-Report-Only头的生成选项,允许网站在不强制执行的情况下测试HPKP策略,降低误配置导致网站不可访问的风险。
UD5工具箱