微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SSLContext 不使用来自 JVM TrustStore 的证书

如何解决SSLContext 不使用来自 JVM TrustStore 的证书

我需要向使用 TLS 客户端身份验证的服务器发送请求。为此,我使用我的证书和私钥创建了一个 PKCS12 文件,并将其在 SSLContext 中设置为 KeyManager。

KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
keystoreInputStream = new FileInputStream("C:/Users/PC/Desktop/certprivate.p12");
keystore.load(keystoreInputStream,"password".tochararray());

KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(keystore,"password".tochararray());

SSLContext sc = SSLContext.getInstance("TLSv1.3");
sc.init(kmf.getKeyManagers(),null,null);

我还使用 keytool 在 cacerts 存储中添加了来自服务器的证书,虽然这不起作用,但我使用 InstallCerts 下载我猜所有的中间证书并将这些证书安装在 cacerts 中。我现在遇到的问题是 400 No required SSL certificate was sent

我不确定为什么会出现这种情况,根据我的理解,如果 TrustManager 设置为 null,它将使用认的 TrustManager,在这种情况下是:

String certificatesTrustStorePath = "C:/Program Files/Java/jdk-15.0.2/lib/security/cacerts";
System.setProperty("javax.net.ssl.trustStore",certificatesTrustStorePath);
System.setProperty("javax.net.ssl.trustStorePassword","changeit");

编辑:我不明白为什么请求失败,因为 TLS 握手已经完成。否则我会得到一些其他错误/异常。

解决方法

在你的java启动命令行添加-Djavax.net.debug=all,你会得到更多信息。 在您可以诊断您的问题之后。 JC

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。