java使用HttpClient请求https接口报错:unable to find valid certification path to requested target

一、原因

主要原因为接口服务器配置的https证书不合法,导致服务端返回的数字证书没有通过客户端的校验。

二、解决方法

1.使用合法的https证书;

2.接口调用跳过证书校验(大部分使用该方法);

代码如下:

TrustStrategy acceptingTrustStrategy = (x509Certificates, authType) -> true;
SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, acceptingTrustStrategy).build();
SSLConnectionSocketFactory connectionSocketFactory = new SSLConnectionSocketFactory(sslContext, new NoopHostnameVerifier());

HttpClientBuilder httpClientBuilder = HttpClients.custom();
httpClientBuilder.setSSLSocketFactory(connectionSocketFactory);
CloseableHttpClient httpClient = httpClientBuilder.build();

//org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
//设置请求超时时间
factory.setConnectionRequestTimeout(5 * 1000); 
factory.setConnectTimeout(5 * 1000);
factory.setReadTimeout(5 * 1000);
factory.setHttpClient(httpClient);
//org.springframework.web.client.RestTemplate
RestTemplate restTemplate = new RestTemplate(factory);
restTemplate.getMessageConverters().add(new WxMappingJackson2HttpMessageConverter());
//设置请求头,根据具体要求设置
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.add("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");

//请求参数
MultiValueMap<String, String> requestMap= new LinkedMultiValueMap<>();
requestMap.add("paramA", "1234");
requestMap.add("paramB", "1234");
requestMap.add("paramc", "1234");

HttpEntity requestEntity = new HttpEntity<>(requestMap, requestHeaders);
//发起请求,这里举例为post请求,get请求的话调用getForObject方法
//这里url即为请求接口地址
//response为返回参数构建的实体Class
ResponseEntity entity= restTemplate.postForEntity(url, requestEntity, ResponseEntity.class);

 

三、知识点补充

补充一下https请求验证过程

https://www.cnblogs.com/zhuqil/archive/2012/07/23/2604572.html

 

 

 

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值