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

时间:2019-02-10 02:20:09

标签: ssl ssl-certificate

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

1 个答案:

答案 0 :(得分:2)

客户端通常在本地信任库中仅具有根CA。服务器需要提供通往根CA的叶证书和中间证书。除TLS握手中的叶子证书外,通常还发送中间证书。

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