正如@Ted Bigham在评论中提到的那样,这将通过证书固定来实现:-
检测和阻止多种 MITM 攻击的一种方法是“证书固定”,有时也称为“SSL 固定”。进行证书锁定的客户端在普通的 TLS 协议或 SSL 协议上增加了一个额外的步骤:在以标准方式获得服务器的证书后,客户端会根据受信任的验证数据检查服务器的证书。通常,受信任的验证数据以该证书的受信任副本、该证书的受信任哈希或指纹或证书的公钥的形式与应用程序捆绑在一起。例如,Chromium 和Google Chrome 包含 *.google.com 证书的验证数据,该证书在 2011 年检测到欺诈性证书. 在其他系统中,客户端希望它第一次获得服务器的证书时是可信任的并存储它;在以后与该服务器的会话期间,客户端会根据存储的证书检查服务器的证书,以防止以后的 MITM 攻击。
从什么是证书固定?:-
一些较新的浏览器(例如 Chrome)将使用 HSTS 机制进行证书固定的变体。他们将一组特定的公钥哈希预加载到此 HSTS 配置中,这将有效证书限制为仅指示指定公钥的证书。
HTTP 严格传输安全 (HSTS)是一种通过 HTTP 响应标头(仅通过 HTTPS 发送)实现的技术,它告诉浏览器“记住”网站只能通过 HTTPS 访问一段时间。如果设置了 HSTS并且之前www.example.com
的用户访问已过期,浏览器将改为请求,并且不会通过纯 HTTP 发送任何请求。HSTS 要求用户已经访问过该站点才能收到标头,但是 Google 在其 Chrome 浏览器代码中实施了一种解决方法:http://www.example.com
max-age
https://www.example.com
Google Chrome 和 Mozilla Firefox 通过实现“STS 预加载列表”来解决此限制,该列表包含支持 HSTS 的已知站点。此列表与浏览器一起分发,因此它也使用 HTTPS 对列出的站点进行初始请求。
更新以下问题编辑
根据 SilverlightFox 的回答,有没有办法“请求”固定我的网站证书?和/或如何将其添加到“STS 预加载列表”?
根据这篇博文,您应该联系浏览器开发人员以将其包含在 HSTS 列表中,并将您的公钥(或 CA)固定在浏览器中:
这个域 HSTS 预加载在 Chrome 中吗?现在它被硬编码在二进制文件中,并有望增长。您可以联系 Chromium 以将您的网站包含在该列表中。
和
因此,目前,唯一的解决方案是固定 CA 签署您的网站证书的公钥,即联系 Chromium 团队以将其包含在代码中。