我有一台 Windows Web 服务器,通常我会在“LocalMachine\Root”中安装 ca-authority,在“LocalMachine\My”中安装中间 PFX 证书,一切正常。现在我想知道,如果在生成 PFX 证书期间我包含了 ca-bundle,是否可以避免在“LocalMachine\Root”中安装 ca-authority,而只需在“LocalMachine\My”中安装包含 bundle-ca 的 PFX?
答案1
根 CA 证书通常安装在 TLS 连接的另一端,与 PKCS#12 (PFX) 文件中的证书相对应。
如果 PKCS#12 文件包含客户端身份验证证书及其私钥和颁发该证书的 CA 的证书(以及可能的其他中间 CA 证书),则该链将安装在您的设备中并用于向远程服务器验证您的身份。如果该服务器信任该根 CA,则该服务器应该在其信任锚存储中安装该根 CA,并使用该根 CA 来验证客户端提供的 PKCS#12 证书。
类似地,如果 PKCS#12 文件包含服务器身份验证证书及其私钥和颁发该证书的 CA 的证书(以及可能的其他中间 CA 证书),则链将安装在您的服务器中并用于向您的设备进行身份验证。如果您信任该根 CA,您的设备应该在其信任锚存储中安装该根 CA,它会使用该根 CA 来验证服务器提供的 PKCS#12 证书。
也就是说,PKCS#12 只是一个容器,因此允许其他证书和密钥的组合,但以上是最常见的两种用例。
如果您安装了 PKCS#12 中的所有证书,这并不意味着您信任其中的任何根 CA 证书。您信任谁/什么不是双向的 - 这是您的选择。您需要明确做出该选择以确保系统的完整性。
例如,如果您在 Firefox 浏览器上安装 PKCS#12 以便登录网站,则在 Firefox 的信任锚存储中的 PKCS#12 内自动安装任何根 CA 是没有意义的。您可能不想信任该根 CA 来验证 Web 服务器,而只想信任它来验证客户端。也就是说,Firefox 开发人员无权决定您信任哪些根 CA。
类似地,如果您在 Windows 服务器中安装 PKCS#12,它可以将这些证书提供给连接到它的任何客户端,并且这些客户端(如果它们在其信任锚存储中安装了根 CA 证书)将信任该服务器。但是,这并不意味着您要自动信任该根 CA 向您的服务器提供的其他证书,例如客户端身份验证证书。
底线是——由你来决定信任什么。