我已经在Web应用程序上运行ssltest,它发现“链问题-包含锚”(“附加证书(如果提供)”部分)

是什么意思?应该修复吗?可以利用吗?

#1 楼

当服务器将其证书发送给客户端时,它实际上会发送一个证书链,以便客户端发现更容易验证服务器证书(不需要客户端使用该证书链,但实际上,大多数客户端将使用链和其他)。 SSL / TLS标准的7.4.2节对此进行了说明,尤其是以下启发性摘录:发件人的证书必须在列表中排在首位。随后的每个
证书必须直接对之前的证书进行认证。因为
证书验证要求根密钥必须独立分发
,所以在
假设远端必须已经拥有它以便在任何情况下对其进行验证。


因为这是“ MAY”情况(“ MAY”,“ MUST”,“应该“ ... RFC中的术语具有RFC 2119中解释的非常精确的含义),允许服务器在链中包含或拒绝根证书(又称“信任锚”)。一些服务器包含它,其他服务器不包含它。一个典型的客户端实现,旨在精确使用已发送的链,将首先尝试在其信任库中查找链证书。否则,它将尝试在其信任库中查找“最后”链证书的颁发者。因此,无论哪种方式,这都符合标准,并且应该起作用。

(关于链顺序的混乱很少。在真正的X.509中,链是从信任锚定的。 SSL / TLS“ Certificate”消息以相反的顺序编码,首先是限定服务器本身资格的end-entity证书,这里是SSL / TLS术语,不是X.509。)

关于在链中发送根的唯一不好的事情是,它不必要地使用了一点网络带宽。每个连接大约有1 kB数据,其中包括完整的握手。在客户端(Web浏览器)和服务器之间的典型会话中,只有一个连接属于该类型。来自客户端的其他连接将使用基于初始握手的“缩写握手”,并且完全不使用证书。每个连接都会保持活动状态,以处理许多连续的HTTP请求。因此,根发送所隐含的网络开销很小。

#2 楼

这意味着站点提供的证书包括证书链的根证书(证书链接到其颁发者的证书的链,根是其自己的颁发者的证书)。

因为仅当客户端明确信任其链的根(或中间)证书时,才信任证书,因此不需要提供根证书:如果受信任,则客户端已经拥有该证书。顺便说一句,该报告指出,再加上“在信任存储区中”的注释。考虑到对证书的100%评级,ssltest似乎也很高兴。信任该网站。但是,此类客户端的用户仍然遇到麻烦。