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

feign调用跳过HTTPS的SSL证书校验配置详解

一、问题抛出

如果不配置跳过SSL证书校验,当Feign客户端尝试连接到一个使用自签名证书的服务器时,可能会抛出类似以下的异常:

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 target

二、原因分析

如果不添加跳过SSL证书校验的配置,Feign客户端在调用HTTPS服务时会严格验证服务器的SSL证书。这种行为是默认且推荐的做法,因为它可以确保通信的安全性和完整性。以下是如果不添加该配置的具体影响:

2.1 证书验证

默认行为:Feign客户端会使用系统的默认TrustManager来验证服务器的SSL证书。
验证内容:
证书有效性:检查证书是否由受信任的证书颁发机构(CA)签发。
证书过期:确保证书在有效期内。
证书链:验证证书链的完整性。
主机名匹配:确保证书中的主机名与请求的主机名匹配。
目的:验证服务器的身份,确保客户端连接的是正确的服务器。
过程:
客户端请求服务器的证书。
服务器返回证书。
客户端验证证书的有效性,包括证书是否由受信任的CA签发、证书是否过期等。
如果验证通过,客户端和服务器使用证书中的公钥进行密钥交换,建立安全的通信通道。

2.2 影响

安全性增强:确保数据传输的安全性和完整性,防止中间人攻击。
潜在问题:
自签名证书:如果服务器使用自签名证书或内部CA签发的证书,客户端会拒绝连接,除非这些证书被显式信任。
证书过期或无效:如果证书过期或无效,客户端会拒绝连接。
主机名不匹配:如果证书中的主机名与请求的主机名不匹配,客户端会拒绝连接。

三、解决方法-跳过SSL证书校验

风险:跳过SSL证书校验会使得中间人攻击成为可能,攻击者可以拦截并篡改数据。
适用场景:仅在开发和测试环境中使用,生产环境中应严格配置和验证SSL证书。
实现方法:
创建一个自定义的TrustManager,忽略证书校验。
配置自定义的SSLSocketFactoryHostnameVerifier

四、代码配置,跳过SSL证书校验

@Slf4j
@Configuration
public class FeignClientConfig {@Beanpublic Logger.Level feignLogLevel() {return Logger.Level.FULL;}@Beanpublic CachingSpringLoadBalancerFactory cachingFactory(SpringClientFactory clientFactory) {return new CachingSpringLoadBalancerFactory(clientFactory);}@Bean@ConditionalOnMissingBeanpublic Client feignClient(CachingSpringLoadBalancerFactory cachingFactory,SpringClientFactory clientFactory) throws NoSuchAlgorithmException, KeyManagementException {SSLContext ctx = SSLContext.getInstance("SSL");X509TrustManager tm = new X509TrustManager() {@Overridepublic void checkClientTrusted(X509Certificate[] chain, String authType) {}@Overridepublic void checkServerTrusted(X509Certificate[] chain, String authType) {}@Overridepublic X509Certificate[] getAcceptedIssuers() {return new X509Certificate[0];}};ctx.init(null, new TrustManager[]{tm}, null);return new LoadBalancerFeignClient(new Client.Default(ctx.getSocketFactory(),HttpsURLConnection.getDefaultHostnameVerifier()),cachingFactory, clientFactory);}
}

五、总结

不添加跳过SSL证书校验的配置可以显著提高安全性,但可能会导致连接失败,特别是在使用自签名证书或内部CA证书的情况下。因此,建议在生产环境中正确配置和验证SSL证书,而在开发和测试环境中可以考虑使用跳过SSL证书校验的配置,但应谨慎使用。

http://www.lryc.cn/news/524755.html

相关文章:

  • 今天也是记录小程序进展的一天(破晓时8)
  • SQL-leetcode—1084. 销售分析 III
  • Linux C\C++编程-文件位置指针与读写文件数据块
  • Flask简介与安装以及实现一个糕点店的简单流程
  • 【自动化测试】—— Appium使用保姆教程
  • 西门子【Library of General Functions (LGF) for SIMATIC S7-1200 / S7-1500】
  • IntelliJ IDEA 2023.3 中配置 Spring Boot 项目的热加载
  • Python----Python高级(正则表达式:语法规则,re库)
  • 通过Ukey或者OTP动态口令实现windows安全登录
  • Node.js接收文件分片数据并进行合并处理
  • Lsky-Pro在线图片搭建教程(Docker部署方式)
  • “深入浅出”系列之算法篇:(2)openCV、openMV、openGL
  • AI 新动态:技术突破与应用拓展
  • 从CRUD到高级功能:EF Core在.NET Core中全面应用(三)
  • 【记录】Jenkins版本及JDK关系介绍的官网地址
  • vue3-json-viewer和vue-json-pretty插件使用,vue3 json数据美化展示
  • python转转商超书籍信息爬虫
  • Spring Boot 中的 InitializingBean:Bean 初始化背后的故事
  • 微信小程序:实现单选,多选,通过变量控制单选/多选
  • MOS怎样选型,步骤详解
  • CMake技术细节:解决未定义,提供参数
  • 1688 满足跨境业务需求而提供的一组 API 接口
  • 物联网网关Web服务器--CGI开发实例BMI计算
  • 计算机网络 (51)鉴别
  • 【Docker】搭建一个功能强大的自托管虚拟浏览器 - n.eko
  • 论文笔记(六十二)Diffusion Reward Learning Rewards via Conditional Video Diffusion
  • 探索 Stable-Diffusion-Webui-Forge:更快的AI图像生成体验
  • Redis使用基础
  • PyCharm+RobotFramework框架实现UDS自动化测试- (四)项目实战0x10
  • 【TCP】rfc文档