为什么自签名证书不受信任,有没有办法让它们受信任?

信息安全 tls 证书颁发机构
2021-08-20 12:14:11

我在本地制作了根 CA 证书。我使用 CA 证书签署 IA 证书,并使用 IA 证书签署服务器证书。当我尝试访问使用服务器证书的本地服务器时,它会给我一个安全风险警告。有没有办法让它不发出警告?

我基本上想知道的是,是否有可能使自签名证书受信任?

4个回答

您需要将根证书导入浏览器的信任库。一旦浏览器知道您信任此根证书,由此签名的所有证书都将显示为受信任。

请注意,这只会使您信任连接,任何未安装根证书的其他人仍将收到错误消息。

自签名证书本质上不被您的浏览器信任,因为证书本身不会形成任何信任,信任来自每个人都信任的证书颁发机构签名。您的浏览器根本不信任您的自签名证书,就好像它是根证书一样。要让您的浏览器接受您的证书,请进入您的浏览器配置并将证书添加为根证书。

让自签名证书受信任的最好方法是通过密钥仪式,这基本上是一个大型公共活动,所有密码学家和安全专家聚集在一起见证根 CA 生成他​​们的密钥对并声明自己是根 CA . 一切都被记录下来:视频,每个人都是谁,每个人的律师都做了什么。私钥被分成许多不同的部分,通常在签署一个证书后分别存储在保险箱中,该证书用作签署其他证书的中介。您可以阅读有关典型程序的信息如果你愿意。当然,您需要拥有最先进的技术和物理安全性,才能做到这一点,并且让任何人想要使用或信任您的根 CA。完成此操作后,您的证书可能会包含在浏览器发行版中,然后公众可以使用它来创建证书的信任链。

实际上,自签名证书可以是安全的,只是不在我们现在使用的模型下。


在目前每个人都使用的广泛传播的 CA(证书颁发机构)模型下,由受信任的 CA 签署的证书的目的是提供身份验证。

当我们获得证书时,我们真正看到的只是 1 和 0 从墙上的插孔中进来;我们不知道那些 1 和 0 是从哪里来的。然而,因为证书是由 CA签署的——这是世界上除了 CA 之外没有人能做的事情——而且因为我们信任 CA 来验证证书所有者的身份,所以我们相信证书来自它声称的人到。

当然,如果CA 遭到破坏没有正确验证所有者,那么所有的赌注都将失败。


但是,还有另一种模型,在该模型下,自签名证书确实提供了真实性。它被称为公证模型

本质上,我们不是信任单个 CA,而是将信任分配给任意数量的公证人这些公证员在 Internet 上搜索证书,并保存他们看到的所有证书的缓存。当您第一次访问一个站点并获得证书时,您会询问一些全球分布的公证人他们最后看到的证书是什么。如果他们不同意您所看到的,您可能会成为中间人攻击的一部分。

在这种模式下,自签名证书是完全安全的,只要我们假设在任何公证人可以查看其证书之前服务器没有立即受到威胁。


公证模型仍处于起步阶段,它是否会接管 CA 模型令人怀疑(实际上,它不必——它们可以串联使用)迄今为止最有前途的项目是Convergence.io,它有一个 Firefox 插件。

更简短的答案。

这里有很多答案,但似乎没有一个是直截了当的:如果没有中立和公认的第三方(例如证书颁发机构)验证证书所有权,证书就毫无意义。

更长的答案。

为了更好地理解,在执行诸如创建 HTTPS 连接之类的操作时,您有以下链:

  • 向服务器发出请求的客户端 Web 浏览器。
  • 远程 Web 服务器将数据发送回客户端。
  • 以及由中立的第 3 方授权的 HTTPS 证书,该证书保证服务器就是它的身份,因此加密是有效的。

自签名证书本质上是不受信任的,因为任何人都可以生成自签名证书任何人,包括故意假装自己不是某物/某人的实体。使用自签名证书,根本没有受信任的第三方将基本的人工程序设置为简单地说:“好的,这个域有一个我们颁发给他们的证书,因此你可以信任他们。我们说他们实际上是声称的领域,而不是冒名顶替者。”

而且由于世界上任何人都可以自己创建自签名证书,因此它的使用存在固有的信任问题。使证书有效的原因与深度技术或加密技术几乎没有关系,但使证书有效的是一个以中立和公认的第三方为中心的过程,验证使用过程和浏览器制造商遵守这些过程。

归根结底,加密密钥对是一堆毫无意义的比特和字节,没有围绕它们的流程和程序的强制执行。