HPKP
HTTP 公钥固定 (HPKP) 详解:为你的网站增加一层安全保障
HTTP 公钥固定 (HPKP),现已弃用,但其原理和历史意义对于理解现代 Web 安全至关重要。本文将深入探讨 HPKP 的概念、运作方式、优势、劣势,以及它为何最终被放弃,并与现代替代方案进行对比。HPKP 的核心目标是提升 HTTPS 的安全性,防止恶意攻击者利用被 证书颁发机构 (CA) 攻破的情况进行 中间人攻击。
什么是 HTTP 公钥固定?
HPKP 是一种 Web 安全机制,它允许网站告诉 Web 浏览器哪些 SSL/TLS 证书 或证书颁发机构是可信的。简单来说,它就像给浏览器提供了一个“白名单”,浏览器只接受来自白名单中证书或 CA 的证书连接。这与传统的 证书验证 方式不同,传统的验证方式依赖于信任整个 CA 系统。
在默认情况下,浏览器信任预定义的 根证书,这些根证书由各个操作系统和浏览器厂商维护。当浏览器连接到 HTTPS 网站时,它会验证网站提供的证书链,确保该链可以追溯到受信任的根证书。然而,如果某个 CA 被攻破,攻击者就可以伪造证书,从而进行中间人攻击。
HPKP 通过绕过部分 CA 系统,直接将信任锚定在特定的公钥上,从而减轻了这种风险。网站可以通过 HTTP 响应头告知浏览器哪些公钥或 CA 是可信的。
HPKP 的运作方式
HPKP 的实现基于 HTTP 响应头 `Public-Key-Pins`。该响应头包含一个或多个 “pin”,每个 pin 代表一个可信的公钥或证书颁发机构。pin 的格式如下:
``` pins="pin-sha256=<SHA256 散列值>, pin-sha256=<SHA256 散列值>, ...;" ```
- `pin-sha256`:指定使用 SHA256 算法对公钥进行哈希处理。
- `<SHA256 散列值>`:公钥的 SHA256 哈希值。
浏览器在建立 HTTPS 连接时,会验证服务器提供的证书的公钥的 SHA256 哈希值是否与 `Public-Key-Pins` 响应头中指定的哈希值匹配。如果匹配,则连接可以继续;如果不匹配,则浏览器会拒绝连接,从而阻止潜在的中间人攻击。
HPKP 还支持 `includeSubDomains` 指令,允许将 pin 应用于所有子域名。例如:
``` pins="pin-sha256=<SHA256 散列值>, includeSubDomains;" ```
HPKP 的优势
- **增强安全性:** HPKP 显著降低了因 CA 被攻破而导致中间人攻击的风险。即使攻击者获得了 CA 的控制权,他们也无法伪造证书,除非他们能够获得与网站 pin 匹配的公钥。
- **抵御恶意证书:** 即使攻击者成功申请了恶意证书,如果该证书的公钥不匹配 pin,浏览器也会拒绝连接。
- **主动防御:** HPKP 是一种主动的安全措施,它允许网站主动控制哪些证书是可信的,而不是依赖于 CA 的验证。
- **减少对 CA 的依赖:** 通过将信任锚定在特定的公钥上,HPKP 减少了对整个 CA 系统的依赖。
HPKP 的劣势
- **配置复杂:** 正确配置 HPKP 可能很复杂。需要仔细选择要 pin 的公钥,并考虑备用 pin 的问题。
- **难以撤销:** 一旦 pin 设置错误,撤销它可能非常困难。如果网站需要更换证书,必须更新所有客户端的缓存,否则用户可能会无法访问该网站。这涉及到 DNS 缓存 和浏览器缓存等多个层面。
- **兼容性问题:** 早期版本的浏览器可能不支持 HPKP。
- **错误配置的风险:** 如果配置不当,HPKP 可能会导致网站无法访问,甚至可能导致 拒绝服务攻击。
- **维护成本:** 证书轮换和密钥管理需要持续的维护工作。
- **证书透明度 (CT) 的兴起:** 证书透明度 提供了另一种增强 HTTPS 安全性的方法,它通过公开记录所有颁发的证书来提高透明度和可审计性。CT 的普及降低了对 HPKP 的需求。
- **备用 pin 的重要性:** 如果主 pin 失效,没有有效的备用 pin 会导致网站无法访问。
- **长期维护的难度:** 随着密钥的轮换,需要及时更新 pin,否则可能导致安全漏洞。
HPKP 的替代方案
由于 HPKP 的缺点,特别是撤销难题,Google 和 Mozilla 等浏览器厂商已经逐步弃用了 HPKP。它们推荐使用更灵活、更易于管理的替代方案,例如:
- **证书透明度 (CT):** CT 是一种公开的日志系统,记录所有颁发的 SSL/TLS 证书。通过监控 CT 日志,可以检测到恶意证书或未经授权的证书颁发。
- **Expect-CT:** Expect-CT 是一个 HTTP 响应头,允许网站要求浏览器验证证书是否已发布到 CT 日志中。
- **CRLite:** CRLite 是一个证书撤销列表 (CRL) 的压缩版本,可以提高 CRL 的性能和可用性。
- **自动化证书管理 (ACM):** 使用 Let's Encrypt 等 ACM 工具可以自动生成和更新 SSL/TLS 证书,从而简化证书管理过程。
- **短期证书:** 使用有效期较短的证书可以降低证书被攻破的风险。
HPKP 的历史和现状
HPKP 最初由 Google 提出,并在 2015 年被标准化。然而,由于其固有的缺点,HPKP 的使用率一直不高。2020 年,Google 和 Mozilla 宣布弃用 HPKP。Chrome 已经移除了对 HPKP 的支持,Firefox 也计划在未来移除支持。
虽然 HPKP 已经不再被推荐使用,但了解其原理仍然很重要,因为它有助于理解现代 Web 安全的演变。
HPKP 与其他安全技术
HPKP 与其他 Web 安全技术之间存在着复杂的交互关系。
- **HSTS (HTTP Strict Transport Security):** HSTS 强制浏览器始终使用 HTTPS 连接到网站。HPKP 可以与 HSTS 结合使用,以提供更强大的安全性。HSTS 预加载 可以进一步提高 HSTS 的安全性。
- **Content Security Policy (CSP):** CSP 允许网站控制浏览器可以加载的资源,从而降低 跨站脚本攻击 (XSS) 的风险。
- **Subresource Integrity (SRI):** SRI 允许网站验证从 CDN 加载的资源的完整性,从而防止恶意代码注入。
- **SSL/TLS 协议:** HPKP 建立在 SSL/TLS 协议之上,它负责加密 Web 流量。TLS 1.3 是最新的 TLS 协议版本,提供了更高的安全性。
- **Web 应用防火墙 (WAF):** WAF 可以过滤恶意流量,保护 Web 应用程序免受攻击。
结论
HTTP 公钥固定 (HPKP) 是一种曾经被认为是增强 HTTPS 安全性的有希望的技术。然而,由于其配置复杂、难以撤销以及与现代替代方案相比缺乏灵活性,HPKP 最终被弃用。现在,证书透明度 (CT)、Expect-CT 和自动化证书管理 (ACM) 等技术已经成为更有效、更易于管理的解决方案。
理解 HPKP 的历史和原理有助于我们更好地理解现代 Web 安全的演变,并选择最适合自己需求的安全性措施。网站运营者应该关注最新的安全最佳实践,并及时更新其安全策略,以保护用户的数据和隐私。 了解 SSL 证书管理 对于维护网站安全性至关重要。 同时也应该关注 渗透测试 和 漏洞扫描 以发现潜在的安全风险。
参见
- HTTPS
- SSL/TLS
- 证书颁发机构 (CA)
- 中间人攻击
- 证书透明度 (CT)
- Expect-CT
- HSTS (HTTP Strict Transport Security)
- Content Security Policy (CSP)
- Subresource Integrity (SRI)
- TLS 1.3
- Web 应用防火墙 (WAF)
- DNS 缓存
- 拒绝服务攻击
- SSL 证书管理
- 渗透测试
- 漏洞扫描
- Let's Encrypt
- 密钥轮换
- 公钥基础设施 (PKI)
- 证书撤销列表 (CRL)
- 跨站脚本攻击 (XSS)
立即开始交易
注册 IQ Option (最低存款 $10) 开设 Pocket Option 账户 (最低存款 $5)
加入我们的社区
订阅我们的 Telegram 频道 @strategybin 获取: ✓ 每日交易信号 ✓ 独家策略分析 ✓ 市场趋势警报 ✓ 新手教育资源