访问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();

10-06 03:28