如何将某个域的证书固定添加到我的 Web 浏览器?

信息安全 tls 网页浏览器 浏览器扩展
2021-09-03 22:17:16

服务器使用 HPKP(HTTP 公钥固定)来告诉客户端的 Web 浏览器(将来)要信任哪些证书,用于正在联系的域。
Google 的 Chrome 和 Mozilla 的 FireFox 提供了他们自己的固定到某些证书的网站列表。(谷歌将此列表中的条目称为“pinset”。)

如何将其他域的证书固定添加到我的 Web 浏览器(例如 FireFox)?

在 Web 浏览器中查看证书的详细信息时,是否有没有“将此证书固定到此 URI”选项的原因?它会破坏 CA 的概念,还是只是没有实施?

3个回答

您可以在 Google Chrome 中使用 chrome://net-internals/#hsts 执行此操作:

在该屏幕中,您可以查询网站的固定状态(HSTS、HPKP 和预加载),但您也可以为任何域添加证书固定

添加域部分,您可以为任何域指定:

  • 如果你想强制 HSTS
  • 如果你想固定一些证书:你需要指定公钥指纹列表

在 Web 浏览器中查看证书的详细信息时,是否有没有“将此证书固定到此 URI”选项的原因?它会破坏 CA 的概念,还是只是没有实施?

是的,有一个原因使用户难以固定证书:如果网站管理员需要更新他的证书,那么他没有办法通知用户。浏览器会告诉您密钥无效,但您无法确定它是否合法。

chrome net 内部结构:hsts 为此,您必须导出证书,然后执行:

openssl x509 -in certificate.crt -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64

(将“certificate.crt”替换为之前保存的文件名)

你会得到类似的东西: YpcIku2YvZ9Q6rgTn8juPpBlEdzH7YFm9ZOLPImwwJk=

然后用 sha256/YpcIku2YvZ9Q6rgTn8juPpBlEdzH7YFm9ZOLPImwwJk= 填写“公钥指纹”字段

(注意开头添加的 sha256/)

但是,如果您想为多个网站执行此操作,我强烈建议您使用像@WhiteWinterWolf 建议的那样为 Firefox 的 Certificate Patrol ( https://addons.mozilla.org/fr/firefox/addon/certificate-patrol/ ) 的插件.

HPKP 没有解决这个需求。

HPKP是 HTTP 协议的扩展,允许网站管理员向浏览器提供特定的 pining 信息,从而允许:

  • 检查构成当前 HTTPS 连接的认证链的至少一个证书(取决于平台架构架构,服务器管理员可以选择不固定最终证书,而是使用中介或根证书),
  • 提供与备份证书相对应的替代 Pin,以防主证书丢失/泄漏/等,以便客户端在证书更改后保持访问网站的能力,
  • 告诉浏览器是否也应该为子域启用证书锁定,
  • 根据潜在的密钥迁移计划,告诉浏览器该 pin 的适用时间。

如果 HPKP 设置不当,浏览器将拒绝对网站的任何访问,而无需用户直接追索。以上所有细节主要由服务器管理员知道和控制,而不是最终用户,因此最终用户无法在其浏览器中正确配置 HPKP pin。

相反,您可能会寻找浏览器存储有关非 HPKP 网站提供的证书的一些信息,并能够在证书更改时提醒您,直到用户检查新证书并同意继续,如果一切似乎都井井有条。这样的功能至少在 Firefox 上已经存在,但由诸如Certificate Patrol之类的插件处理。

如何将其他域的证书固定添加到我的 Web 浏览器(例如 FireFox)?

我认为它在 Firefox 中没有 GUI。对于 Chrome,请参阅 Tom 的回答。

在 Web 浏览器中查看证书的详细信息时,是否有没有“将此证书固定到此 URI”选项的原因?

是的。当需要进行密钥翻转时,这是支持地狱。

它会破坏 CA 的概念,还是只是没有实施?

两个都。这是故意的。往上看。