SSL固定(嵌入主机)和普通证书(由服务器提供)有什么区别

What is the difference between SSL pinning (embedded in host) and normal certificates (presented by server)

我不是很理解在 SSL 连接建立中固定证书的必要性(以避免中间人攻击)。

SSL 证书固定需要在主机中嵌入原始服务器证书以验证服务器提供的证书。主机中嵌入的服务器证书与服务器提供的供客户端验证的证书有什么区别?

我在这里缺少什么?

what is the difference between the server certificate embedded in the host and the one presented by server to be validated by client?

应该有 none,这正是证书固定的意义所在。

如果没有固定证书,应用程序通常会接受与请求的主机名匹配并由本地受信任的 CA(证书颁发机构)颁发的任何证书。鉴于本地信任库中通常有超过 100 个 CA,其中一个在 2011 年 the case of DigiNotar 中被成功攻击就足够了。因此,将您接受的证书限制为特定证书是有意义的,即固定。

除了通过将收到的证书与本地存储的证书进行比较来固定证书外,还有其他固定方法:例如,可能只检查指纹(哈希)而不是完整的证书。如果证书可能过期,则只检查 public 密钥而不是整个证书可能更有用,因为 public 密钥通常保留在证书更新中。或者可以固定到一个特定的 CA,认为该 CA 可以为该域颁发证书。

请注意,要了解固定,您可能需要了解服务器身份验证的工作原理。其中一部分是验证服务器证书(主机名、过期时间、信任链……)。但这还不够,因为证书本身是 public,即每个人都可以获得它并可以在 TLS 握手中发送它。因此,身份验证的另一个主要部分是服务器证明它是证书的所有者。这是通过使用与证书匹配的私钥对一些数据进行签名来完成的。由于只有证书的所有者应该拥有私钥,这证明了所有权。因此,任何人都可以嵌入用于固定的服务器证书,但只有服务器本身才能证明证书的所有权。

什么是 SSL 固定

应用程序被配置为信任 select 几个证书或证书颁发机构 (CA),而不是默认行为:信任在设备/机器上预先配置的所有 CA。不需要 SSL 固定

为什么要使用 SSL Pinning(为什么不使用)

在许多情况下,只要任何根(或中间根)CA 遭到破坏(很少发生),服务器返回的证书就可能被篡改。威胁行为者可以使用这个受损的 CA 为您的网站生成证书,然后向访问者展示他们的网站。这是不好的。在某些情况下,SSL pinning 旨在防止这种情况发生,但还有更好的方法(恕我直言)。

话虽如此,我不知道有任何 网站 使用 SSL 固定,因此 SSL 固定似乎主要针对移动应用程序进行讨论。似乎 SSL pinning only 在您可以信任应用程序的来源(例如 App Store、Play Store)时起作用,为什么?因为如果你必须访问一个网站才能获得证书,那么到那时就太晚了(你可能已经使用了一个狡猾的证书并访问了假网站或者是 MITM'd)。因此,Steffen 提到的好处似乎并不那么引人注目,尤其是当已经有更好的解决方案时:

更好的解决方案

我不确定 any-CA-compromise 是否是威胁向量,即使对于银行也是如此。相反,银行和其他有安全意识的组织会明智地选择他们的 CA,并配置 CAA record.

  • 通过使用 CAA DNS 记录,他们可以限制客户端(例如浏览器、移动应用程序)在访问其特定网站时仅信任某些证书。
  • 他们选择 CA 并仅从该 CA 创建证书
  • 如果 CA 遭到破坏,他们会有备份计划。不想在这里深入探讨,但恕我直言,CAA 记录的备份计划比 SSL 固定要好得多。

例如,Monzo.com(我用 whatsmydns 找到了这个)有一个 CAA 记录,它将证书限制为只有 4 个 CA(digicert、amazon、comodoca、buypass):

0 iodef "mailto:security@monzo.com"
0 issue "amazon.com"
0 issue "buypass.com"
0 issue "comodoca.com"
0 issue "digicert.com"
0 issue "letsencrypt.org"
0 issuewild "amazon.com"
0 issuewild "comodoca.com"
0 issuewild "digicert.com"
0 issuewild "letsencrypt.org"

这些是人们信任的流行 CA,我们希望他们不会让我们失望。如果他们这样做,整个互联网将对所有人免费。防止这种情况的唯一方法是成为您自己的 CA/使用自签名证书。

总结

我看不出 SSL 固定将如何变得无处不在,尤其是因为它增加了更多的开销(关于 ssl 到期的维护,或者无论如何都信任一个 CA - SPoF,或者模拟 CAA 记录的作用,但需要额外的代码/维护负担)。它还仅支持您预装的应用程序,不支持网站。