返回顶部

创建一个配置为信任所有HTTPS连接的RestTemplate实例,不验证服务器的SSL证书。这个示例主要用于测试或开发环境,对接第三方接口时一直提示SSL证书校验异常,可通过下面的方法绕过校验:

这个配置类使用背景:可参考博客:

springboot 使用restTemplate 发送https请求 忽略ssl证书

https://jsonll.blog.csdn.net/article/details/129191580?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-129191580-blog-83038086.235%5Ev43%5Epc_blog_bottom_relevance_base2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-129191580-blog-83038086.235%5Ev43%5Epc_blog_bottom_relevance_base2&utm_relevant_index=2



public
class RestTemplateUtilTool { public static RestTemplate restTemplateHttps() { RestTemplate restTemplateTool = null; try { TrustStrategy acceptingTrustStrategy = (chain, authType) -> true; SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, acceptingTrustStrategy).build(); SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE); HttpClientBuilder clientBuilder = HttpClients.custom(); CloseableHttpClient httpClient = clientBuilder.setSSLSocketFactory(sslsf).build(); HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); requestFactory.setHttpClient(httpClient); restTemplateTool = new RestTemplate(requestFactory); } catch (Exception e) { e.printStackTrace(); } return restTemplateTool; }

这个RestTemplateUtil类中的restTemplateHttps方法是为了创建一个配置为信任所有HTTPS连接的RestTemplate实例。让我为你逐步解释它都在做什么:

  1. 定义变量:

    • RestTemplate restTemplate = null;: 初始化一个RestTemplate变量,并将其设置为null。
  2. 设置信任所有证书的TrustStrategy:

    • TrustStrategy acceptingTrustStrategy = (chain, authType) -> true;: 这是一个Lambda表达式,它定义了一个TrustStrategy,该策略简单地返回true,表示它信任所有证书,无论它们是否有效或来自受信任的颁发机构。
  3. 创建SSL上下文:

    • 使用SSLContexts.custom().loadTrustMaterial(null, acceptingTrustStrategy).build();,基于前面定义的信任策略,创建一个SSLContext实例。
  4. 创建SSL连接套接字工厂:

    • 使用SSLConnectionSocketFactory,它使用前面创建的SSLContext和一个NoopHostnameVerifier(不执行任何主机名验证)。这意味着HTTPS连接不会检查主机名是否与证书中的主机名匹配。
  5. 配置HttpClientBuilder:

    • 使用HttpClients.custom()创建一个HttpClientBuilder实例。
    • 使用setSSLSocketFactory(sslsf)将之前创建的SSLConnectionSocketFactory设置为HTTP客户端的SSL套接字工厂。
    • 使用build()方法构建CloseableHttpClient实例。
  6. 配置RestTemplate的HTTP请求工厂:

    • 创建一个HttpComponentsClientHttpRequestFactory实例。
    • 使用setHttpClient(httpClient)方法将之前创建的CloseableHttpClient实例设置为请求工厂的HTTP客户端。
  7. 创建RestTemplate实例:

    • 使用配置好的HttpComponentsClientHttpRequestFactory实例来创建一个新的RestTemplate实例。
  8. 异常处理:

    • 如果在上面的任何步骤中发生异常,它都会被捕获并打印到标准错误输出(e.printStackTrace())。
  9. 返回RestTemplate实例:

    • 最后,方法返回配置好的RestTemplate实例。如果发生异常,它将返回null(这通常不是一个好主意,因为调用者可能会在没有检查null的情况下使用这个值,从而导致NullPointerException)。

注意:这种方法应该谨慎使用,因为它会使你的应用程序容易受到中间人攻击(MITM)。在生产环境中,你应该始终验证服务器的SSL证书。这个示例主要用于测试或开发环境,其中你可能需要绕过SSL证书验证。

 
 
可见链接:

RestTemplete 忽略安全证书

https://blog.csdn.net/nmjhehe/article/details/83038086?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-83038086-blog-117602595.235^v43^pc_blog_bottom_relevance_base2&spm=1001.2101.3001.4242.2&utm_relevant_index=4
posted @ 2024-05-28 09:23  fen斗  阅读(327)  评论(0编辑  收藏  举报