如何使用Spring RestTemplate调用HTTPS restful Web服务

我正在使用Tomcat7,Spring框架进行ReST Web服务。 我试图使用Spring RestTemplate调用https Web服务。 我收到以下错误:

无法找到所请求目标的有效证书路径; 嵌套exception是javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到所请求目标的有效证书路径

我在stackoverflow上在线检查。 我尝试了url中的示例代码: 使用Spring RestTemplate访问Https Rest服务

我无法让它发挥作用。 任何人都可以根据下面的代码告诉我,我需要更改什么? 也有人可以告诉我或者提供我需要的java库的pom.xml文件吗?

import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.client.RestTemplate; import com.fasterxml.jackson.core.JsonGenerationException; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.journaldev.spring.controller.EmpRestURIConstants; import com.journaldev.spring.model.CostControlPost; import com.journaldev.spring.model.Employee; import com.journaldev.spring.model.RfxForUpdate; import static org.junit.Assert.*; import org.apache.commons.codec.binary.Base64; import javax.net.ssl.*; import java.io.*; import java.security.KeyStore; import java.security.MessageDigest; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; public class TestExample2 { public static final String SERVER_LIST="https://abc/sourcing/testServices"; @Test public void testGetListOfServiceNames() { try { RestTemplate restTemplate = new RestTemplate(); ResponseEntity response = restTemplate.exchange(SERVER_LIST,HttpMethod.GET,null,String.class); assertNotNull(response); } catch(Exception e) { System.out.println("e:"+e.getMessage()); } } } 

您需要在密钥库中拥有证书,或者您可以接受所有证书(拒绝证书validation)

所以你可以将rest模板的bean重新定义为

 @Bean public RestTemplate restTemplate() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException { TrustStrategy acceptingTrustStrategy = (X509Certificate[] chain, String authType) -> true; SSLContext sslContext = org.apache.http.ssl.SSLContexts.custom() .loadTrustMaterial(null, acceptingTrustStrategy) .build(); SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext); CloseableHttpClient httpClient = HttpClients.custom() .setSSLSocketFactory(csf) .build(); HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); requestFactory.setHttpClient(httpClient); RestTemplate restTemplate = new RestTemplate(requestFactory); return restTemplate; } 

除了apache核心,客户端和依赖项之外,您不应该需要额外的jar。