将自签名证书添加到 Windows 受信任的根证书颁发机构存储有什么影响?

信息安全 tls 证书
2021-08-21 06:41:02

我是一个崭露头角的网站开发人员,所以请容忍我的无知。

假设我必须使用 HTTPS 加密我的网站,并且每次出现有关不受信任的证书的警告时,我都不得不单击“继续”。我使用这种方法来安装我的站点的证书。

假设我签署的证书是由“xyz”颁发的。由于该商店被称为“受信任的根证书颁发机构”,我假设它信任“xyz”作为证书颁发机构。当我的证书添加到商店时,这是否意味着“xyz”颁发的任何证书现在都被自动信任?

或者是否将域的 SSL 证书安装到“受信任的根证书颁发机构”只会使该域受信任?

关键是我想特别忽略我的网站的警告,但不想忽略任何其他网站的警告。

编辑:我可能应该阐明我用来创建证书的确切程序。该网站部署在具有默认 OpenSSL 和 Apache 配置的 Ubuntu 10.04 服务器上。要创建证书和密钥文件,我只是使用

# make-ssl-cert generate-default-snakeoil –force-overwrite

并单独留下 /etc/apache2/sites-available/default-ssl 因为 make-ssl-cert 命令将这两个文件写入 Apache 配置文件指向的相同路径。所以我什至没有设置证书颁发机构来生成我网站的证书。

这会改变场景吗?在客户端上安装没有证书颁发机构作为受信任根创建的证书与安装使用证书颁发机构创建的证书有什么区别?

编辑2:好的,如果我尽可能缩小问题范围会更好:如果我为我的网站保护证书并确保它永远不会逃脱,那么要求其他人将我的证书安装为受信任的根目录是否安全? 攻击者是否能够利用我的自签名证书并将安装它的人定位到他们受信任的证书存储中?

2个回答

当您将 CA 证书安装为“受信任的根”时,这意味着您的应用程序将信任此 CA 证书颁发的任何证书。默认情况下,这不限于特定域。X.509是证书的标准,包括一种指定给定 CA 仅用于在特定“区域”中颁发证书的方法,例如,对于域中的服务器(即名称约束扩展,请参阅第 4.2.1.10 节),但现有实现对它的支持很差,或者根本不支持。所以我建议不要依赖这个功能。

因此,基本规则是,当您安装新的受信任根时,您是在将您的浏览安全性委托给私钥的所有者。如果是所有者(这是自己生成的自签名证书),那么您有责任确保 CA 密钥的安全。只要没有其他人得到私钥的副本,就没有问题。这导致以下方法:

  1. 创建一个新的密钥对和一个自签名证书。
  2. 使用新创建的 CA 为您的服务器颁发证书。
  3. 将 CA 证书作为受信任的根导入。
  4. 忘记CA 私钥(销毁密钥;理想情况下,密钥位于您放在 RAM 支持的文件系统上的文件中,从而使抑制相当完整)。

你就完成了。如果私钥不复存在,那么它尤其是恶意对手无法触及的。

另一种方法是对服务器本身使用自签名证书,并指示您的 Web 浏览器仍然只信任您站点的证书。如果您的浏览器可以做到这一点,则无需摆弄根 CA。Firefox可以做到这一点;他们称之为安全异常

如果有人拦截您用户的流量,该人可以发起中间人攻击并向您的用户提供他们自己的证书来安装,而不是您的。在这种情况下,他们将能够解密客户端和服务器之间传递的所有数据。

除此之外,没有任何后果。