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

标签 java ssl ssl-certificate handshake sslhandshakeexception

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

我的 keystore 有 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 path validation failed: java.security.cert.CertPathValidatorException: timestamp check failed. .................. more lines.. caused by java.security.cert.CertPathValidatorException: timestamp check failed........ more lines.. caused by java.security.cert.CertPathValidatorException: NotAfter : date1

尝试重新连接,但这次 date2 再次出现相同的错误。现在,即使我的 keystore 中有过期的证书,这也不会更早发生。

谁能解释一下如何在服务器问候消息中选择证书链?我尝试了很多研究,但无法得到具体的东西

最佳答案

与您在评论中被告知的相反,这并非“无法回答”。

  1. 选择的证书满足客户端在 ClientHello 消息中提供的签名者、密码套件和协议(protocol)。
  2. 如果有选择的话,如果您已经安装了 KeyManager,那就是在控制之中:否则,JSSE 在控制之中并且没有进一步指定。

关于java - 在 SSL/TLS 握手中的 “server-hello” 消息期间选择证书链的逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47143978/

相关文章:

java - 如何使随机线程等待,然后在恒定时间后将其唤醒

java - 如何在运行时从 DynamoDB 获取排序结果

python - 请求 SSL : CERTIFICATE_VERIFY_FAILED with verify ="./cabundle.crt"

oracle - 确定使用 Oracle utl_http 执行 https post 需要哪个证书

java - 如何更新 JTable

spring-mvc - 如何将 Spring 配置为忽略 SSL 证书有效性

ssl - 如何使 ARR 在禁用 SSL 卸载的情况下工作? 502.3 错误网关

php - 无法让 curl_exec 对 HTTPS url 起作用

java - "PKIX path building failed"和 "unable to find valid certification path to requested target"

java - 为什么我必须在 @Configuration 注释注释的 Spring 配置类中有一个默认构造函数?