当不属于链的一部分时,IE/Chrome 如何知道使用哪个中间 CA?

当不属于链的一部分时,IE/Chrome 如何知道使用哪个中间 CA?

我的网络上的服务器使用 RapidSSL CA 颁发的证书进行签名,但未提供完整的颁发者链(RapidSSL CA 的证书由受信任的根颁发机构 GeoTrust CA 颁发)。

当我使用 Firefox 访问该网站时出现以下错误:

The certificate is not trusted because no issuer chain was provided.
(Error code: sec_error_unknown_issuer)

但是如果我使用 IE 或 Chrome 连接到网站,它就可以正常工作,并且我注意到 RapidSSL 随后被加载为中间 CA。我不明白 Chrome/IE(我假设它使用 Windows 证书存储)如何知道将 RapidSSL 添加为中间 CA。

openssl s_client当我使用它来调试连接时,我得到了预期的行为(据我所知) 。

当仅使用 GeoTrust 作为 CA 时,我得到以下信息:

Verify return code: 21 (unable to verify the first certificate)

仅使用 RapidSSL 作为 CA:

Verify return code: 2 (unable to get issuer certificate)

当同时使用两者时:

Verify return code: 0 (ok)

有人能帮助我理解 Windows 如何知道加载 RapidSSL CA 作为中间机构吗?

答案1

CA 证书是根据颁发的证书的授权信息访问 (AIA) 扩展中的 URL 信息下载的。

据我所知,Firefox 使用自己的证书存储和/或链接引擎。Chrome 和 IE 使用 Windows 中的那个。


证书验证流程

当证书提供给应用程序时,应用程序必须使用证书链引擎来确定证书的有效性。只有成功验证证书链后,应用程序才能信任证书以及证书所代表的身份。使用三个不同但相互关联的过程来确定证书的有效性:

证书发现要构建证书链,证书链引擎必须收集颁发 CA 证书和所有 CA 证书,直至根 CA 证书。CA 证书是从 CryptoAPI 缓存、组策略或企业策略中收集的,或者作为最后的手段,从颁发证书中的授权信息访问 (AIA) 统一资源定位器 (URL) 下载。从 CryptoAPI 缓存以外的位置下载证书后,该证书将添加到用户的 CryptoAPI 缓存中,以便更快地检索。

路径验证当证书链引擎验证证书时,它不会停留在所呈现的证书上。必须验证证书链中的每个证书,直到达到自签名根证书。验证测试可以包括验证 Authenticode 签名、确定颁发 CA 证书是否包含在 NTAuth 存储中,或包含特定应用程序或证书策略对象标识符 (OID)。如果一个证书未通过有效性测试,则整个链可能会被视为无效,并且不会被调用应用程序使用。

答案2

这确实是不同的证书存储。只有尚未内置这些证书的应用程序才需要中间证书。每个证书都包含颁发者 CA。唯一的问题是该颁发者证书是否受信任。添加中间证书有助于默认安装一组较小的受信任证书的软件。

相关内容