java 安全客户端套接字身份验证

标签 java security ssl jsse

为了发送服务器证书的安全服务器套接字,我所做的就是使用已使用我的 keystore 初始化的 KeyManagerFactory.getKeyManagers() 初始化 SSLContext
但是我如何在客户端执行此操作?
IE。我为客户做的:

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);

我使用与信任库相同的 keystore 。我假设只是为了寻找周围的 JSSE 就可以了。
问题是我进入了服务器部分(服务器套接字中的 setNeedClientAuth 为 true)。

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

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

谢谢!

最佳答案

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

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

关于java 安全客户端套接字身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4915230/

相关文章:

java - WebSphere 6.1.0.29 上的 http_access.log

php - 可利用的 PHP 函数

facebook - 在 javascript 中公开 facebook 用户访问 token 有哪些安全风险?

java - Android 中 Locale.getAvailableLocale 和 assetManager.getLocale 之间的区别?

java - 使用 ObjectOutputStream 和 ObjectInputStream 打开/保存 JTable 中的数据

java - 轻松路径 JBoss

php - 在php中检测TCP session 的MSS大小

java - 如何为使用 openssl 启动的 ssl 服务器单独维护 trutstore ..?

SSL 证书不是来自托管服务提供商

带有客户端证书的android webview