[英]java secure client socket authentication
对于安全的服务器套接字,以便发送服务器证书,我要做的只是使用已使用密钥库初始化的KeyManagerFactory.getKeyManagers()
初始化SSLContext
。
但是如何在客户端执行此操作?
即我为客户做的:
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
中将setNeedClientAuth设置为true)。
Exception in thread "main" javax.net.ssl.SSLHandshakeException: null cert chain
那么我应该如何配置客户端以发送证书?系统属性不是正确的方法吗?
因为我看不到如何在客户端使用SSLContext。
谢谢!
您不必在客户端上设置特定的配置即可使用证书进行身份验证。 密钥库中可能缺少一些中间的CA,并且客户端无法从服务器发送的信任锚中构建证书路径,因此无法确定证书是否适合身份验证。
您可以将系统属性javax.net.debug
添加到all
以在标准输出上打印调试流。 也许您可以获得有关该错误的更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.