Ssl TLS客户端是否需要在信任存储中具有中间CA?

Ssl TLS客户端是否需要在信任存储中具有中间CA?,ssl,ssl-certificate,Ssl,Ssl Certificate,当TLS握手发生时,服务器发送他的ServerHello消息,即他的数字证书。此数字证书由名为a的中间CA进行数字签名,CA a还有一个由名为root的CA进行签名的证书,该CA的证书是自签名的,因此形成了一个证书链。然后,客户端必须建立信任,验证服务器证书。要执行该验证,客户端必须验证整个链是否正确? 客户端必须在信任存储中拥有所有证书(a和根证书),否则客户端将下载它们?客户端通常在本地信任存储中只有根CA。服务器需要提供通向根CA的叶证书和中间证书。中间证书通常是在TLS握手中除了叶证书之

当TLS握手发生时,服务器发送他的ServerHello消息,即他的数字证书。此数字证书由名为a的中间CA进行数字签名,CA a还有一个由名为root的CA进行签名的证书,该CA的证书是自签名的,因此形成了一个证书链。然后,客户端必须建立信任,验证服务器证书。要执行该验证,客户端必须验证整个链是否正确?
客户端必须在信任存储中拥有所有证书(a和根证书),否则客户端将下载它们?

客户端通常在本地信任存储中只有根CA。服务器需要提供通向根CA的叶证书和中间证书。中间证书通常是在TLS握手中除了叶证书之外发送的


但是,仅由服务器发送叶证书是一种典型的错误配置。在这种情况下,证书验证将失败,除非客户机已经知道中间证书或能够以某种方式获得这些证书。由于经常使用相同的中间证书,一些浏览器(如Firefox)会缓存它们在与服务器A通信时获得的中间证书,并在损坏的服务器B未发送所需的中间证书时填充这些证书。其他浏览器(如Google Chrome)将尝试从互联网下载丢失的中间证书。大多数较简单的客户端(即用Python、Java…或curl编写的应用程序)将因证书验证错误而失败。

否。客户端只需要其信任库中链中的任何签名证书,通常是最上面的。客户机必须尽可能地验证其已信任的整个链。(1)服务器应该发送完整链,但可以选择不发送根或锚;参见RFC。它在证书消息中执行此操作,而不是在ServerHello消息中。(2) 如果服务器无法发送链,则客户端可能有一个缓存,加上现在许多CA都包含AuthorityInfoAccess扩展,客户端可能会使用该扩展来获取缺少的非根,但这取决于客户端。根或锚必须预先安装,而不是下载,因为下载可能会被篡改或伪造。请注意,此类问题最好在询问。感谢您的澄清,这对我帮助很大。