在 SSL/TLS 握手中的“server-hello”消息期间选择证书链的逻辑?

Posted

技术标签:

【中文标题】在 SSL/TLS 握手中的“server-hello”消息期间选择证书链的逻辑?【英文标题】:Logic for choosing a certificate chain during a “server-hello” message in a SSL/TLS handshake? 【发布时间】:2018-04-19 00:44:56 【问题描述】:

在客户端-服务器 ssl 握手中,我的服务器在服务器问候消息中将证书链发送回客户端。但我想了解该特定证书链是如何被选中的。

我的密钥库有 5 个链

chain1>
privatekey (expired at let's say date1) --
intermediate or server cert (valid) --
root (valid)

chain2>
privatekey cert (valid for 6 more months)--
intermediate or server cert (valid)--
root (valid)

chain3>
privatekey cert (expired at lets say date2) --
intermediate or server cert (valid)--
root (valid)

chain4>
privatekey cert (valid for 1 year) --
intermediate or server cert (valid)--
root (valid)

chain5>
privatekey cert (expired at lets say date3) --
intermediate or server cert (valid)--
root (valid)

现在,每当客户端尝试连接到我的服务器(用于 Web 服务)时,都会获得以下异常并且客户端无法连接

sun.security.validator.ValidatorException:PKIX 路径验证 失败:java.security.cert.CertPathValidatorException:时间戳检查 失败的。 .................. 更多行.. 由 java.security.cert.CertPathValidatorException:时间戳检查 失败........ 更多行.. 由 java.security.cert.CertPathValidatorException: NotAfter : date1

尝试重新连接,但这次 date2 再次出现同样的错误。现在,即使我的密钥库中有过期的证书,这种情况也不会发生。

任何人都可以解释如何在服务器问候消息中选择证书链吗?我尝试了很多研究,但无法得到具体的东西

【问题讨论】:

如果不知道如何设置 ServerSocket,就无法回答。 @Lothar : ServerSocket、X509TrustManager 或任何其他高级工厂未定制。 X509TrustManagers 用于检查对端的证书,与握手时选择自己的证书无关。同样,请提供您设置 ServerSocket 的来源 【参考方案1】:

这并非“不可能回答”,这与您在 cmets 中被告知的相反。

    选择的证书满足客户端在ClientHello 消息中提供的签名者、密码套件和协议。 如果可以选择,如果您安装了KeyManager,则可以控制:否则,JSSE 可以控制,无需进一步指定。

【讨论】:

我很确定 JSSE 在这种情况下处于控制之中,因为我不记得有任何 KeyManager。检查了 rfc5246 官方文档,但它有很多密码套件和算法的排列和组合,很难破译.. 至少对我来说 @vistar81 不知道您希望我对此说什么,但很难理解为什么您不只是摆脱过期的证书。 在docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/… 有一些关于密钥选择算法的信息。它模糊地表明选择是基于服务器和客户端支持的密码套件、SNI(服务器名称指示)和可接受的发行者。从 OP 的经验来看,密钥选择算法是随机的。

以上是关于在 SSL/TLS 握手中的“server-hello”消息期间选择证书链的逻辑?的主要内容,如果未能解决你的问题,请参考以下文章

SSL/TLS 握手过程详解***

SSL/TLS 链接的建立/握手

ftp_nlist():data_accept:SSL / TLS握手失败

TLS握手协议

SSL/TLS 握手中出现问题

Https加密原理:SSL/TLS四次握手过程(转载)