Spring Boot 3.x.x中如何跳过Spring Rest Template的SSL证书验证?
Spring Boot 3 中 RestTemplate 跳过 SSL 证书验证的正确实现
你遇到的编译错误是因为 Spring Boot 3 默认使用 Apache HttpClient 5.x,而网上常见的方案都是基于 HttpClient 4.x 的,两者 API 差异很大。下面是适配 Spring Boot 3 的完整实现:
完整代码示例
import org.apache.hc.client5.http.classic.HttpClient; import org.apache.hc.client5.http.impl.classic.HttpClients; import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory; import org.apache.hc.client5.http.ssl.SSLContexts; import org.apache.hc.client5.http.ssl.TrustStrategy; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; import javax.net.ssl.SSLContext; import java.security.cert.X509Certificate; public class RestTemplateSslConfig { public RestTemplate createSslDisabledRestTemplate() throws Exception { // 信任所有证书的策略 TrustStrategy acceptingTrustStrategy = (X509Certificate[] chain, String authType) -> true; // 构建SSL上下文 SSLContext sslContext = SSLContexts.custom() .loadTrustMaterial(null, acceptingTrustStrategy) .build(); // 创建SSL连接套接字工厂 SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContext); // 构建HttpClient实例 HttpClient httpClient = HttpClients.custom() .setSSLSocketFactory(sslSocketFactory) .build(); // 创建请求工厂并设置HttpClient HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); requestFactory.setHttpClient(httpClient); // 初始化RestTemplate return new RestTemplate(requestFactory); } }
关键变化说明
- 依赖版本切换:Spring Boot 3 自动引入 Apache HttpClient 5.x,替代了旧版的 4.x,所有相关类的包路径从
org.apache.http改为org.apache.hc.client5.http - API 调整:
- 原
SSLConnectionSocketFactory替换为org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory - 原
HttpClients替换为org.apache.hc.client5.http.impl.classic.HttpClients HttpComponentsClientHttpRequestFactory的setHttpClient方法现在接受org.apache.hc.client5.http.classic.HttpClient类型参数
- 原
- SSLContext 构建:使用 HttpClient 5.x 提供的
SSLContexts工具类,用法和旧版类似但包路径不同
注意事项
- 这种跳过 SSL 验证的方式仅适合测试环境,生产环境绝对不能使用,会带来严重的安全风险
- 如果需要在生产环境处理自签名证书,建议通过加载自定义信任证书的方式实现,而不是全盘信任所有证书
内容的提问来源于stack exchange,提问作者Rohit Shedage
相关产品推荐
相关产品推荐

