当前位置: 首页 > news >正文

Spring Boot RestTemplate请求证书问题

Spring Boot RestTemplate请求证书问题

  • 场景
  • 报错描述
  • 原因
  • 解决
  • 补充
  • 赶紧跑路!


场景

GG!忙活了一个月的需求正式上线,第一天就嗷嗷报错,没一条数据是请求成功的。因为程序里插入了监控程序,监控程序报错,毕竟这个项目刚开始引入都是后台处理,不添加监控程序真报错谁也不知道。如果查过10次报错就会发送提示邮件,告诉我们大面积报错了,赶紧处理。大清早的领导就哐哐@我们。程序报错邮件发了,赶紧去看!


报错描述

org.springframework.web.client.ResourceAccessException:I/O error on POST request for "https://xxxxx.com": PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target; nested exception is javax.net.ssl.SSLHandshakeException: PKIX path building failed:

原因

由于该网站的SSL证书不受信,所以才会报这个错误。但是测试环境好的,很头秃!


解决

其实有三种解决方案:

  • 信任所有证书:本次是这么解决的,由于是内网走代理,请求的url固定。
	@Beanpublic RestTemplate restTemplate() throws NoSuchAlgorithmException, KeyStoreException, KeyManagementException {return new RestTemplate(generateHttpRequestFactory());}private 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;}

有可能你引入的包找不到相对应的依赖,需要引入apache的请求包:

implementation 'org.apache.httpcomponents:httpclient:4.5.1'
  • 将不信任的证书加入到JVM默认信任证书
  • 单独为不信任的网站生成证书并在项目中指定

后面这两种比较类似,都需要使用keytool 工具,但是对此项目来讲不是很合适,所以目前只使用第一种。其他两种后面用到了再具体补充。

补充

之前也遇到一个报错也是这么解决的

I/O error on POST request for "https://xxxx.com": java.security.cert.CertificateException: No subject alternative DNS name matching test.xxxxxxx.com found.;

记录一下

赶紧跑路!

相关文章:

  • 2023年上-未来几年我要做什么
  • ACPF UI 框架设计与基础实现
  • 【Springboot】单元测试Junit5应用
  • 算法笔记刷题日记——3.简单入门模拟 3.1简单模拟
  • 合并分支rebase和merge的区别
  • 新手指南:Postman 旧版本(历史版本)下载
  • Unity类银河恶魔城学习记录1-12 PlayerComboAttack源代码 P39
  • js中原始类型和对象引用
  • 深入解析Elasticsearch的内部数据结构和机制:行存储、列存储与倒排索引之行存(一)
  • canvas设置图形各种混合模式,类似photoshop效果
  • 一篇文章了解系统眼中的键盘--以一个简单的系统分析从按键的输入到字符的显示
  • PyTorch中tensor.backward()函数的详细介绍
  • 微信小程序(三十三)promise异步写法
  • 从源代码看Chrome 版本号
  • 前后端分离,RSA加密传输方案
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • Bootstrap JS插件Alert源码分析
  • CentOS6 编译安装 redis-3.2.3
  • ES6--对象的扩展
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • JavaScript中的对象个人分享
  • JS+CSS实现数字滚动
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • laravel 用artisan创建自己的模板
  • mockjs让前端开发独立于后端
  • nodejs实现webservice问题总结
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 创建一种深思熟虑的文化
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 坑!为什么View.startAnimation不起作用?
  • 前端代码风格自动化系列(二)之Commitlint
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 优化 Vue 项目编译文件大小
  • 原生 js 实现移动端 Touch 滑动反弹
  • 再谈express与koa的对比
  • 阿里云移动端播放器高级功能介绍
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ​渐进式Web应用PWA的未来
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (30)数组元素和与数字和的绝对差
  • (九十四)函数和二维数组
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)Google的Objective-C编码规范
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .net(C#)中String.Format如何使用
  • .NET/C# 使用反射注册事件
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • .project文件