访问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);
我尝试了2种方法来提供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");
我也尝试过使用HTTPclient使用简单的Java代码,然后它可以正常工作,但使用SPring RestTemplate时,所有选项均不起作用,我在这里遗漏了什么吗?
注意:如果我卷曲该URL,则会得到与没有提供truststore相同的错误。因此,我假设此问题归因于TrustStore。
最佳答案
最后,我能够解决以上问题。
在构建SSL上下文时,我没有加载密钥库(尽管我通过参数传递了密钥库),由于密钥库不可用,导致我无法获得认证身份验证。
下面的代码解决了该问题:(添加了loadKeyMaterial)
sslcontext = SSLContexts.custom().loadTrustMaterial(trustStore, new TrustSelfSignedStrategy())
.loadKeyMaterial(keyStore, keyStorePwd).build();