在花了很长时间使这项工作完成之后,解决方案如下:
首先,当使用设置属性时,
System.put("key", "value")我注意到经过多次尝试后,它没有设置 它 的KeyStore值
没有出现在ssl日志中 ,还尝试将属性设置为使用
-Djavax.net.ssl.keyStore=""此功能的tomcat配置中的参数也不起作用。
所以我
KeyStore从这样的阅读
InputStream:
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType()); FileInputStream io = new FileInputStream("path/to/jks/file.jks"); try{ keystore.load(io, "pass".toCharArray()); } finally { io.close(); }并使用相同的先前代码读取
TrustStore如下内容:
KeyStore trustStore= KeyStore.getInstance(KeyStore.getDefaultType()); FileInputStream stream = new FileInputStream("path/to/truststore/file.jks"); try{ keystore.load(stream, "trusted".toCharArray()); } finally { stream.close(); }之后定义
SSLContext:
SSLContext sslcontext = SSLContexts.custom() .loadKeyMaterial(keystore, "keyPassword".toCharArray()) .loadTrustMaterial(truststore, new TrustSelfSignedStrategy()) .build();
loadKeyMaterial用来加载
keyStore它,它以您的privateKey的密码
"keyPassword"作为参数,因此您必须使用密码来保护私钥,当我尝试使用未使用密码加密“受保护”的普通私钥时,出现异常:
java.security.UnrecoverableKeyException:Cannot recover key,默认情况下,它与密钥库密码相同,除非您对其进行了更改。
然后创建
SSLConnectionSocketFactory并将其作为参数传递给
HttpClient..这对我有用:)



