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

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

52
0
0
0

HTTP公钥固定(HPKP)模拟演示 - 功能特性

ECDSA P-256密钥对生成

本工具使用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 SHA-256 PIN计算

SPKI(Subject Public Key Info)PIN是HPKP的核心要素。本工具能够自动从生成的公钥中提取SPKI信息,并使用SHA-256算法计算出Base64编码的PIN值。这个PIN值会被放入HPKP响应头中,供浏览器验证使用。

PIN计算流程:
1. 从ECDSA公钥中提取原始字节
2. 构建SPKI ASN.1结构
3. 对SPKI字节进行SHA-256哈希
4. 将哈希结果进行Base64编码

用户可以一次性生成多个密钥对(最多10个),模拟包含当前证书PIN和备份证书PIN的完整HPKP配置。每个PIN值都会以pin-sha256="..."的格式显示在构建好的HPKP头中。

HPKP响应头构建

基于用户生成的PIN值和配置参数,本工具能够自动构建完整的HPKP HTTP响应头。构建的响应头严格遵循RFC 7469标准格式,包含所有必要的指令和参数。

用户可以自由配置以下参数:

  • max-age:PIN的缓存时间,支持从60秒到365天的多种预设值
  • includeSubDomains:是否将HPKP策略应用到所有子域名
  • report-uri:违规报告的接收地址
  • Report-Only:是否仅用于报告而不强制执行

构建好的响应头会以语法高亮的方式显示,方便用户复制到服务器配置中使用。同时提供Apache、Nginx、Node.js等常见服务器的配置示例。

浏览器验证状态模拟

本工具最大的亮点之一是能够模拟浏览器对HPKP策略的验证过程。用户可以选择不同的验证场景,直观地看到浏览器在各种情况下如何响应:

正常验证通过:服务器证书包含已固定的PIN值,浏览器正常加载页面
备份PIN验证:当前证书PIN不在列表中,但备份PIN匹配,验证通过
伪造证书拦截:所有PIN均不匹配,浏览器中断连接并显示安全警告
违规报告发送:验证失败时向report-uri发送违规报告

每种场景都配有详细的解释说明,帮助用户理解浏览器内部的验证逻辑和决策过程。

违规报告JSON预览

当浏览器检测到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策略,降低误配置导致网站不可访问的风险。