域名过期,ssl证书有效,如何防止被攻击?

https是需要证书的,如果我申请的一个证书,申请通过后域名过期被其他人购买并搭建https服务,那我的证书是否可用,没有任何一个检测机制来检验我的证书是否不可信,那我是否相当于伪造了一份受信任的并且是对应网站的证书用来中间人攻击,拿这种情况应该如何防范呢

阅读 2.3k
avatarAI BotBETA

这种情况可以通过域名系统(DNS)和公钥基础设施(PKI)的结合来解决。

当你申请SSL证书时,你需要提供你的域名和私钥。私钥用于在SSL握手过程中验证你的身份。当证书颁发机构(CA)验证你的身份后,它会将证书颁发给你,这个证书包含了你的域名、公钥和一些其他信息。

当浏览器尝试与你的网站建立SSL连接时,它会验证你的证书。首先,浏览器会检查证书中的域名是否与你正在尝试访问的URL匹配。如果域名不匹配,浏览器会显示一个错误消息,说明证书无效或不被信任。然后,浏览器会使用你的公钥来创建一个新的加密连接。

在你的情况下,如果域名过期并且被其他人购买并搭建了HTTPS服务,他们将需要获得一个新的SSL证书。因为证书是与域名绑定的,而不是与特定的服务器绑定的,所以只有拥有正确的私钥的人才能获得有效的证书。如果攻击者试图使用你的旧证书,浏览器会因为域名不匹配而拒绝连接。

然而,如果你的旧私钥被攻击者获取,他们可以使用它来创建一个有效的证书。为了防止这种情况,你应该在域名过期之前及时更新你的证书和私钥。此外,你应该在所有服务器和客户端上强制实施严格的证书验证,包括检查域名匹配、证书颁发机构(CA)的信任链以及证书的有效期。

另外,使用HSTS(HTTP严格传输安全)可以帮助防止中间人攻击。HSTS是一种安全策略技术,它允许网站告诉浏览器,只能通过HTTPS来进行与它的通信。如果攻击者试图使用你的旧证书创建一个HTTPS服务,浏览器会因为违反了HSTS策略而拒绝连接。

总结来说,你应该:

  1. 及时更新你的证书和私钥,以防止它们过期。
  2. 在所有服务器和客户端上强制实施严格的证书验证。
  3. 使用HSTS来增强你的网站的安全性。
4 个回答

这是一个很有意思的问题,前段时间在 V2 的一个帖子问到 “为什么 google 的 ssl 有效期会设置为 3 个月?”,其中就有两条回复提到了这个问题,较短期限的证书时效可以避免因私钥泄漏带来的安全问题,同时也可以在一定程度上避免你提到的这个问题。

当时觉得很有道理,不过也没有深究,刚刚去查了一下相关的资料,了解到了一些信息。

当然,实施这个的前提是,你要把这个请求导向到你的服务器,比如,你提供了一个 DNS 服务受害者使用了你的 DNS,或者修改了目标客户端的 hosts 文件?或者你提供了一个代理服务器等等中间人攻击的方式。

要解决这个问题的话,如果是 App 一类的话,其实比较常见的还是 SSL Pinning,但是浏览器就不一样了

HTTP Public Key Pinning

在早期时候,一些浏览器支持 HTTP Public Key Pinning,服务端在响应头中返回一个 Public-Key-Pins 头,其中包含了可以被信任的证书的 pin-sha256 哈希值,这样就可以解决你提到的这个问题,但是也挺麻烦的。

不过,因为一些其使用率较低,Chrome 67 又终止了对其的支持。(IE 等就从未实现过)

Certificate Transparency

还有另外一个东西 Certificate Transparency(证书透明度),这是由 Chrome 牵头发起的,并且在 Chrome 上已经被强制实施。

简单的说,就是当 CA 机构签发证书后,必须向 CT 的日志服务器提交证书信息,任何人都可以通过查阅 CT 日志来检查域名下存在的证书。

个人理解的话,如果你查到这些证书在有效期,并且确定不是你自己申请的话,可以向 CA 机构申请吊销这些证书,再结合 OCSP Stapling 来解决你所提到的这个问题。

参考资料

新手上路,请多包涵

7 年前的一篇文章 ssl-certificate-mitm-attack-for-expired-domains 里面讨论了和你一样的问题.

帖子下面提到, 你购买了一个域名之后可以向 CA 机构申请吊销这个域名下的证书.

我觉得像大型域名交易都会做类似于这样的操作, 例如 musk 购买了 x.com 之后肯定会去吊销这个域名之前的证书.

你的意思是你有一个域名比如 example.com,2023-12-31 到期,但是你在 2023-10-01 的时候向 CA 申请了一个一年有效期的 SSL 证书,然后 2024-01-01 的时候 example.com 被别人买走了,可你此时手里有一份 2024-10-01 才过期的证书。那么在这期间你就能伪造一个 example.com 站点、并且可以使用 SSL 通信、让用户误以为自己处在“安全协议”之下。是这个意思吧?

确实存在这样的可能。这也是为啥这些国际 CA 签发的有效时间越来越短的原因之一。

@joelin 所提到的“主动向 CA 申请吊销之前的证书”,在实践中几乎是不可能的,因为你压根不知道前一个域名持有人是在哪家 CA 申请过的证书,毕竟这个东西是没有公开查询的方式的。除了大企业有能力挨个向全球的 CA 都申请一遍,其他人你连有哪些 CA 都未必知道、更遑论去主动申请吊销了。

那么是不是就无法避免这个问题了呢?是,也不是。首先 SSL 证书也是分级别的,从低到高分别是 DV、IV、OV、EV,它们的区别就不在这里展开了。其中 OV、EV 这两个高级别证书,CA 是会主动定期验证持有人的有效身份的。一旦发现持有人发生变化,就会吊销无效的证书,并可通过 OCSP(在线证书状态协议)“通知”客户端。

那为什么前面又说“是否无法避免”时说了“是”呢?因为这毕竟不能覆盖到 DV、IV 级别的证书,而且这也未必可靠。毕竟 CA 定期检查它也是有时间差的,不可能是实时的,那这就有了时间差。再一个对于大多数客户端来说 OCSP 都并非强制的,完全可以有办法被绕过、让客户端无法得知之前的证书已经被吊销了。

不过话又说回来了,OV、EV 级别的证书,都贵的离谱,一般也只有大型企业才会买了。自己的域名到期了不续费、还被别人抢注了,这是 IT 部门的失职。不过历史上倒确实出现过这种乌龙,比如 2014 年索尼的域名就到期忘记续费结果被回收了 😂

只能做这些操作来防范,定期检查和监控你的域名和 SSL 证书状态,方便第一时间知道,然后开域名自动续费功能,楼上也说了高级别证书一般用不起的话

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进