对于安全服务器套接字以便发送服务器证书,我所做的就是使用已使用我的密钥库初始化的SSLContext
初始化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它是可以的
问题是我进入了服务器部分(我将serversocket中的setNeedClientAuth
设置为true)。
Exception in thread "main" javax.net.ssl.SSLHandshakeException: null cert chain
那么我应该如何配置客户端发送证书呢?系统属性不是正确的方法吗? 因为我没有看到如何在客户端使用SSLContext。
谢谢!
答案 0 :(得分:0)
您不必在客户端设置特定配置即可使用证书进行身份验证。可能在密钥库中缺少某些中间CA,并且客户端无法从服务器发送的信任锚构建证书路径,因此无法确定证书是否适合进行身份验证。
您可以将系统属性javax.net.debug
添加到all
以在标准输出上打印调试流。也许你可以获得有关错误的更多信息。