在 TCP SSL 服务器握手中,服务器是否也发送 CA 证书?服务器是否需要在 Server Hello 中发送所有中间 CA 证书?
在 SSL 服务器握手中,服务器是否也发送 CA 证书
信息安全
tls
openssl
2021-08-31 10:44:04
1个回答
服务器没有在ServerHello
消息中发送任何证书;它在恰当命名的Certificate
消息中发送证书。
正如标准中所指出的,服务器应该发送一个完整的、有序的证书链,从服务器本身的证书开始,然后是颁发它的中间 CA 的证书,然后是颁发前一个中间证书的中间 CA 的证书CA 证书等。在链的末端,服务器可以选择是否包含根 CA 证书;如果链对客户端有任何用处,那么客户端必须已经知道根,因此不需要它的新副本。标准中的相关文字为:
certificate_list
This is a sequence (chain) of certificates. The sender's
certificate MUST come first in the list. Each following
certificate MUST directly certify the one preceding it. Because
certificate validation requires that root keys be distributed
independently, the self-signed certificate that specifies the root
certificate authority MAY be omitted from the chain, under the
assumption that the remote end must already possess it in order to
validate it in any case.
这很清楚。
请注意,总的来说,证书链不是唯一的。给定的服务器证书可以通过几个,可能是多个证书链进行验证。这自然会在中间 CA 证书更新时发生(因为会有一段时间新 CA 证书有效而旧 CA 证书仍然有效,因此如果它们使用相同的密钥,那么它们将可以互换)。在不同 CA 之间的交叉认证的情况下,给定服务器证书的多个链甚至可能导致不同的根 CA。结果是,虽然 SSL/TLS 服务器应该发送“有效链”,但该链可能不一定是客户端首选的链。
通常,SSL/TLS 客户端将尝试验证从服务器接收到的服务器证书链。如果该链不让客户端满意,那么客户端的行为取决于实现:一些客户端干脆放弃;其他人(尤其是 Windows/Internet Explorer)将尝试使用本地已知的中间 CA 构建另一个链,并从其他证书中的 URL 下载证书(“权限信息访问”扩展)。
其它你可能感兴趣的问题