访问HTTPS服务时,我遇到以下问题:
错误:
..Certification authentication failed</TITLE>
...
An attempt to authenticate with a client certificate failed.
A valid client certificate is required to make this connection.
我正在使用Spring RestTemplate excahnge API:
restTemplate.exchange(reqInfo.getUrl(),HttpMethod.GET,requestEntity,String.class);
我尝试了两种方法来提供trustStore但仍然存在错误:
1。)作为参数传递:
java -cp -Djavax.net.ssl.trustStore="trustStore.jks"
-Djavax.net.ssl.trustStorePassword="pwd" Test
2。)设置属性
System.setProperty("javax.net.ssl.trustStore","path to truststore");
System.setProperty("javax.net.ssl.trustStorePassword","pwd");
我也尝试使用简单的Java代码使用HTTPclient然后它工作正常但是使用SPring RestTemplate没有选项正常工作,我在这里错过了什么?
注意:如果我卷曲了该URL,我会收到与未提供truststore相同的错误。因此我假设这个问题是由TrustStore引起的。
答案 0 :(得分:0)
最后我能够解决上述问题。
在构建SSL上下文时,我没有加载密钥库(虽然我是通过参数传递它),因为我的密钥存储不可用,因此证书身份验证失败。
以下代码修复了问题:(添加 loadKeyMaterial )
sslcontext = SSLContexts.custom().loadTrustMaterial(trustStore, new TrustSelfSignedStrategy())
.loadKeyMaterial(keyStore, keyStorePwd).build();