首页 文章

Java SSLSocket:如何发送完整的服务器证书链?

提问于
浏览
2

当我在Java 7中创建SSLServerSocket时,服务器正确使用我的服务器证书和密钥 . 该证书是由ca.ca的子ca发行的 . 因此,从根证书到服务器证书的完整链具有四个证书 . 完整链存在于密钥库/信任库中 .

但是,当客户端连接服务器时,始终只发送服务器证书本身 . 这也适用于基于Java的Web服务器,如Jetty .

因为大多数客户端只安装了根ca证书而不是两个sub-ca证书,所以这是一个大问题 .

如何强制Java在SSL / TLS握手中发送完整的证书链?

1 回答

  • 4

    密钥库中的密钥条目不仅适用于单个证书,还适用于证书链(请参阅KeyStore.setKeyEntry,其中包含 Certificate[] chain 参数) .

    如果要使用特定链,则需要将其设置为具有证书及其私钥的条目中的链 . 中间证书是否也在同一个密钥库中,在不同的条目中并不重要 .

    这是让客户端发送完整客户端证书链的非常类似的问题 . 从服务器的角度来看,相同的密钥库配置步骤也应该起作用,如this question中所述 .

相关问题