2

对于安全的服务器套接字以发送服务器证书,我所做的就是使用已使用我的密钥库初始化SSLContext的 a进行初始化。 但是我怎么能在客户端做到这一点呢? 即对于我做的客户:KeyManagerFactory.getKeyManagers()

System.setProperty("javax.net.ssl.keyStore", "clientKeystore.keystore");
System.setProperty("javax.net.ssl.keyStorePassword", "secret");
System.setProperty("javax.net.ssl.trustStore", "clientKeystore.keystore");
System.setProperty("javax.net.ssl.trustStorePassword", "secret");
SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket socket = (SSLSocket) factory.createSocket("localhost", 7890);

我使用与信任库相同的密钥库。我认为只是为了寻找 JSSE 就可以了。
问题是我进入了服务器部分(我setNeedClientAuth在 serversocket 中设置为 true)。

Exception in thread "main" javax.net.ssl.SSLHandshakeException: null cert chain

那么我应该如何配置客户端以发送证书?系统属性不是正确的方法吗?
因为我看不到 SSLContext 如何在客户端使用。

谢谢!

4

1 回答 1

0

您无需在客户端设置特定配置即可使用证书进行身份验证。可能密钥库中缺少一些中间 CA,客户端无法从服务器发送的信任锚构建证书路径,因此无法确定证书是否适合身份验证。

您可以添加系统属性javax.net.debugall在标准输出上打印调试流。也许您可以获得有关该错误的更多信息。

于 2011-02-07T11:59:44.230 回答