现在自签名证书实际上比 CA 签名证书更安全吗?

信息安全 tls 证书 公钥基础设施 证书颁发机构
2021-08-29 22:01:00

现在自签名证书实际上比 CA 签名证书更安全吗?

我问这个是因为最近有关 NSA 间谍程序和秘密 FISA 法庭的泄密意味着美国政府可以强制美国的证书颁发机构秘密交出他们的根证书,而 CA 对此无能为力,因为一个秘密的噱头命令。鉴于美国在所有 ISP 和网关中的通信拦截,他们很容易对每个 HTTPS 连接进行 MITM,并给出他们自己的使用相同根证书签名的公钥,从而允许他们拦截在TLS 会话并将所有数据的副本转发回其犹他州数据中心进行分析和永久存储。似乎他们拥有这种能力已经有一段时间了,而且不知道哪些信息被盗了。这基本上破坏了对整个互联网的信任。

知道这些信息后,私人组织为服务器生成自签名证书,然后手动复制该证书并将其提供给 CD/USB 驱动器上的用户,然后他们的用户将手动加载证书是否受信任到他们的网络浏览器?这样,如果连接是由美国 MITM 提供的,那么它将与他们浏览器中的连接不匹配。

但是,由于已经从 Verisign、Comodo 等预加载了“受信任的”CA 证书到浏览器中,因为美国正在对连接执行 MITM 攻击,他们不能只是向真实服务器发起请求,复制公共证书信息,然后根据该信息为所请求的域创建一个新证书,使用浏览器信任的任何根 CA 证书对其进行签名,从而允许他们拦截数据?没有人真正费心查看这些东西来查看证书是否由正确的公司 Verisign、Comodo 或其他公司签署。用户只是在看挂锁。只有管​​理员记得他们创建了自签名证书,而不是由 Verisign 或其他公司签名的证书,才会显得可疑。

这只是让我意识到美国只需要一个预先加载并信任到大多数浏览器中的狡猾的 CA 证书就可以对任何东西执行 MITM 攻击,他们只需将站点的真实证书换成新的证书,并在其中使用任何浏览器信任的根 CA 证书。如果是这种情况,那么您将需要一个新的浏览器配置文件,删除所有受信任的证书,加载您自己组织的受信任证书并仅使用该浏览器在您的组织内进行通信。任何 MITM 尝试都会在浏览器中引发重大警告。

4个回答

这里有一个微妙的点。在设想的情况下,有一个(或多个)流氓 CA 可能会为中间人攻击发出假证书。这里的漏洞与使用来自该流氓 CA 的(正版)证书的服务器无关;它是关于客户端可能接受来自该 CA 的证书。为了保护自己(作为客户端)免受流氓 CA 的侵害,您必须不信任该 CA(即从您的“受信任的根”证书存储中删除它)。这仅仅意味着您仍然希望与之通信的服务器应该使用其他一些不同的 CA 作为其证书。

在公司中,生成自签名证书并将其推送给所有客户端实际上是维护自己的 PKI的一种特殊情况:公司生成一个或多个根,必须在所有客户端中安装。这是可行的;有些公司就是这样做的。但是对于这里讨论的 MitM,在所有客户端的“受信任的根”存储从所有其他潜在的邪恶 CA 中清除之前,什么都不会获得。

不幸的是,您不一定要这样做如果您的操作系统是 Windows,那么有很多用于各种组件的签名,特别是来自 Microsoft 的更新。确实想安装安全修复程序,不是吗?您可以从“受信任的根”中删除大部分根 CA,但不是全部,否则很多事情都会破坏您的操作系统。

概念上的问题是某些操作系统(尤其是 Windows)使用集中式机制进行证书验证,其中有一个信任库被认为适用于在机器上处理证书验证的所有内容(详细地说,有一个“本地machine” 信任存储,对所有用户通用,每个用户有一个额外的信任存储,但用户不能“选择退出”通用本地计算机信任存储)。对于其他操作系统,例如 Linux,您可能会有更好的运气,它们传统上不使用 X.509 证书来满足其内部需求,而是使用 OpenPGP 密钥,具有更加分散的信任系统。


不过,Firefox Web 浏览器使用自己的 SSL 实现和信任库,与基本操作系统分开。此外,Firefox 支持配置文件,这意味着用户可以在 Firefox 中拥有多个“角色”,每个角色都有自己的设置,包括一组受信任的根。因此,担心其数据机密性的公司可以执行以下操作:它可以指示其员工在处理公司服务器时始终使用 Firefox,其特定配置文件仅包含公司自己的根目录(或一组自签名证书)作为“受信任的根”。

目前尚不清楚上述员工是否愿意,但这是可行的。

但请记住,强大的攻击者是强大的。如果该攻击者可以控制“官方 CA”,那么它可以推送一个据称由 Microsoft 签名的虚假更新,该更新会在每个系统中安装一个后门。或者他们可以简单地要求微软自己植入后门。无论如何,您没有太多选择:通过构建,您必须相信操作系统和硬件不会对您进行恶意游戏。

Firefox 的Certificate Patrol等浏览器插件可以警告您自上次或第一次访问以来的更改;但是您会发现许多合法的网络拓扑和负载平衡解决方案都依赖于 SSL 的这种可互换的信任缺陷——因此您在浏览 Internet 时会收到大量提示和警告。

您是正确的,自签名证书或私有根 CA 比预信任的公共根 CA 更安全;前提是您有理由信任私有证书链和接收它的安全通道。那就是:只信任您有理由信任的自签名证书。您将需要删除所有其他预信任的根 CA。

计算机上可能有两个不同品牌的浏览器实例。一个用于仅使用一小部分经过审查的根 CA 的安全通信;和另一个用于不安全通信的普通浏览器实例。


最初,非对称加密(公钥/私钥对)应该涉及某种形式的更直接的信任,例如 1990 年代物理密钥签名方的普及。在 90 年代中期互联网爆炸之前,一个确切可行的方法还没有完全充实。

由于这些物理信任网络被认为在国内或国际距离上对电子商务来说是行不通的——我们接受了创建公司作为其他商业社区“值得信赖的”根 CA;如果他们签署了未经验证的证书,大概可以被起诉。虽然citizen<->business对于电子商务目的而言,这是一个(大部分足够的)信任解决方案它对保护拥有资源和法律权力的实体无济于事,可以窃听和胁迫商业证书颁发机构。

套用一句话:美国国家安全局*说过的最好的谎言是他们的间谍活动不存在或不起作用。

数据保留将其提升到一个全新的水平。

就我个人而言,自从阅读了《往日之光》以来,我已经下意识地接受了没有什么是真正私密的想法。它只是归结为当权者对你有多感兴趣,他们可以支配什么,以及是否存在一个健康的民主制度来控制他们。

* 或 [在此处插入最喜欢的间谍机构]

这里的其他人都非常正确,但这是对您问题的简单直接回答。

如果您在第一次接受自签名证书时可以与服务器所有者进行带外通信,并验证它是他们的证书,并且只识别一个证书以供将来连接到他们的服务器,那么理论上这样一个设置可能比传统的 CA 签名证书更安全。USB 驱动器传输方案将在此处作为带外通信工作,只要您可以确保 USB 驱动器没有以某种方式受到损害。

在这种情况下,无论他们的证书是 CA 签名的还是自签名的,并且该证书是否始终由您的浏览器“固定”(或在您的脑海中),您都可以执行此操作;因此您将检查每个证书的签名是否相同,并且每次访问),那么您可以相对确定没有中间人发生。但是,这涉及必须事先与每个服务器操作员直接交谈并信任每个服务器操作员,而这通常是不可行的。

这种情况还需要一个带外撤销通道,以防敌对实体闯入他们的服务器并窃取他们的私钥。如果你说“好吧,如果服务器运营商不知道私钥泄露怎么办?” 那么就无能为力了;这是 SSL/TLS 通常无法防止的问题。

使用固定证书比仅仅依靠 CA 签名更安全。这与证书是自签名还是由 CA 签名无关。

但是,您需要确保 pinnng 的分布 :-)

对于您在 CD 中分发“安全浏览器”的情况,您可以安装带有命令行的快捷方式,例如http://scarybeastsecurity.blogspot.com.es/2011/04/fiddling的 «Twitter Like A Boss» -with-chromiums-new-certificate.html

(注意:当前的 Chrome 版本不支持 HSTS 中的 public_key_hashes 属性,该属性在该命令行中用于固定证书)