springboot 使用restTemplate 发送https请求 忽略ssl证书
最近在写接口的时候给对方回推数据,发送https请求的时候遇到这么个报错:javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested targetHTTPS经由超文本传输协议(HTTP)进行通信,但利用SSL/TLS来加密数据包,这里遇到的问题就是这个安全证书缺少产生的,所以,为了解决这个问题,一般有良好总方法,第一种是将对方网站的证书提前下到本地导入,这里的场景不大适合这个方式,所以采用第二种方式,忽略ssl证书的方法:
具体步骤大致有3步,首先添加一个RestTemplateConfig配置文件,源码如下:
package com.config;import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.ssl.TrustStrategy;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;import javax.net.ssl.SSLContext;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;@Configuration
public class RestTemplateConfig {@Beanpublic RestTemplate restTemplate(ClientHttpRequestFactory factory){return new RestTemplate(factory);}@Beanpublic ClientHttpRequestFactory simpleClientHttpRequestFactory(){HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();factory.setConnectTimeout(15000);factory.setReadTimeout(5000);return factory;}public static HttpComponentsClientHttpRequestFactory generateHttpRequestFactory()throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException{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();HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();factory.setHttpClient(httpClient);return factory;}
}
第二步,修改初始化RestTemplate类:
RestTemplate restTemplate = new RestTemplate(RestTemplateConfig.generateHttpRequestFactory());
第三步便可以将发送信息写进代码中发送请求了
RestTemplate restTemplate = new RestTemplate(RestTemplateConfig.generateHttpRequestFactory());MultiValueMap<String, Object> headers = new LinkedMultiValueMap<String, Object>();headers.add("Accept", "*/*");headers.add("Content-Type", "application/json");String requestBody = "{\"returnData\":\"" + str + "\"}";System.out.println(str);HttpEntity entity = new HttpEntity(requestBody, headers);ResponseEntity<String> responseEntity=restTemplate.postForEntity("https://****",entity,String.class);//获取返回结果String result= responseEntity.getBody();
工作之余借机记录一下。
springboot 使用restTemplate 发送https请求 忽略ssl证书相关推荐
- RestTemplate 发送 Https 请求调用
RestTemplate 发送 Https 请求调用 个人博客:https://jacob.org.cn import org.apache.http.conn.ssl.NoopHostnameVer ...
- python怎么爬虫https的内容_爬虫15 python 如何处理HTTPS请求访问 SSL证书验证
1 https和SSL之间是什么关系 https和SSL之间是什么关系:https就是在http上面加了一层ssl协议,在http站点上部署SSL数字证书就变成了https. 现在随处可见 https ...
- JAVA实现发送HTTPS请求(SSL双向认证)
一.项目背景 Java项目需要作为客户端发起HTTPS请求访问服务端,并且需要携带证书进行SSL双向认证,当前提供的证书相关文件有:ca.crt.ca.key.client.crt.client.ke ...
- 设置https请求忽略安全证书
前两天要调用第三方的接口遇到了安全证书的问题,找了各种方法下面贴一下自己汇总的解决办法: 第一个写法(这个写法是最简单的,亲测有效,但是这个写法用到了jdk1.8的lambda表达式,1.8之前的版本 ...
- 【Spring】Feign客户端发送HTTPS请求绕过认证
1.概述 转载:https://www.jianshu.com/p/ea627708ab52 一个Spring Boot项目,为了使用Harbor仓库,起初通过Spring RestTemplate完 ...
- springboot忽略证书_SpringBoot中通过java代码实现忽略SSL证书
//工具类 package com.oauth.utils; import org.springframework.stereotype.Component; import java.security ...
- python接口自动化(十二)--https请求(SSL)(详解)
简介 本来最新的requests库V2.13.0是支持https请求的,但是一般写脚本时候,我们会用抓包工具fiddler,这时候会 报:requests.exceptions.SSLError: [ ...
- Python urllib3和requests发送HTTPS请求时出现SSLError或InsecureRequestWarning
目录 问题及原因分析 优先考虑的解决方法: 下载证书 使用证书 手动获取证书 不推荐使用的备用解决方法: 关闭方法 衍生问题 参考文档 问题及原因分析 在我们通过urllib3和requests进行H ...
- java模拟https请求_java-用httpclient模拟发送https请求
--调用项目提供接口,接口是用HTTP URL实现的,最初的想法是另一个项目用jQuery post进行请求. ---但是,很可能另一个项目是部署在别的机器上,那么就存在跨域问题,而jquery的po ...
最新文章
- 算法设计与分析 贪心算法
- kettle 的表输出 table output
- 如何使用云原生数据湖,助力线上教育行业逐步智能化
- axure8.0发布html,Axure 8.0 beta最后一批新增和改进功能的介绍
- linux下的Apache2 + mysql5 + php5 源码完整安装详解
- 吴恩达 深度学习 编程作业(1-3)- Planar data classification with one hidden layer(平面花形状)
- hadoop1.2.1的安装
- d3js scales深入理解
- python+adb实现物理按键长按(比如长按关机)
- ubuntu 切换java环境,配置单独的用户环境
- 2.Node.js access_token的获取、存储及更新
- OpenInventor笔记:线性坐标轴PoLinearAxis的使用
- 如何查看局域网络计算机资料,怎么查看局域网内所有电脑的信息
- 库存进销存出入库销售mysql表结构_进销存数据库表结构设计.doc
- MySQL备份的几种常用方法与恢复步骤
- numpy的array_equal函数
- iOS10.3正式版发布:iOS10.3新功能有哪些? 韩俊强的博客
- module ‘sklearn.utils._openmp_helpers‘ has no attribute ‘__pyx_capi__‘
- 【Git】如何进行分支合并
- calipso是什么意思_fub是什么意思_fub怎么读_fub翻译_用法_发音_词组_同反义词_小而胖的人-新东方在线英语词典...
热门文章
- sql设为简单模式sql_SQL模式演练
- 什么是SQL Server中的数据库规范化?
- nodejs项目安装ant design
- Codeforces 1105C (DP)
- 【转】Python3中urllib详细使用方法(header,代理,超时,认证,异常处理)
- Swift 2.2 最基本的多线程
- Effective Java (7) - 避免终止方法
- nvl,空时的推断和取值
- @Scope(prototype)
- 面向对象课程第四单元作业总结