IE / Chrome如何知道哪个中级CA不是链的一部分?

我的networking上的服务器使用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_clientdebugging连接。

当只使用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作为中间权限?

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

火狐,我听说,使用自己的证书存储和/或链接引擎。 Chrome和IE使用Windows中的一个。


证书validation过程

当证书被呈现给应用程序时,应用程序必须使用证书链接引擎来确定证书的有效性。 只有在证书链validation成功后,应用程序才可以信任证书和证书所代表的身份。 使用三个不同但相互关联的stream程来确定证书的有效性:

证书发现要构build证书链,证书链引擎必须收集颁发CA证书和所有CA证书直到根CA证书。 从CryptoAPIcaching,组策略或企业策略收集CA证书,或者作为最后的手段,从颁发的证书中的颁发机构信息访问(AIA)统一资源定位器(URL)下载。 从CryptoAPI高速caching以外的位置下载证书后,会将其添加到用户的CryptoAPIcaching中,以便更快地进行检索。

pathvalidation当证书链接引擎validation证书时,它不会停留在所提供的证书上。 必须validation证书链中的每个证书,直到达到自签名根证书。 validationtesting可以包括validationauthenticode签名,确定颁发CA证书是否包含在NTAuth存储库中,或者包含特定的应用程序或证书策略对象标识符(OID)。 如果一个证书没有通过有效性testing,则可能整个链将被认为是无效的,并且不被调用应用程序使用。

这确实是不同的证书商店。 只有那些还没有内置证书的应用程序才需要中间件。发行者CA包含在每个证书中。 唯一的问题是,如果发行人证书是可信的。 添加中间件有助于在默认情况下安装一组较小的可信任证书的软件。 。