最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot3使用RestTemplate請求接口忽略SSL證書的問題解決

 更新時間:2025年10月23日 09:27:00   作者:小猿、  
本文主要介紹了SpringBoot3使用RestTemplate請求接口忽略SSL證書的問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

概述

我在項目中使用SpringBoot3版本+中RestTemplate請求接口時候報錯:

PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to fin

注意:springBoot3版本+RestTemplate對應的是spring-web-6.+版本舊版本不適用以下解決方案,構建RestTemplateConfigl類可能會找不到對應方法!?。?/p>

錯誤原因

在使用 RestTemplate 調用 HTTPS 接口時,出現(xiàn) PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 錯誤,通常是因為 Java 應用程序無法驗證服務器的 SSL 證書。

具體原因如下:

  • 證書不受信任:Java 的默認信任庫(cacerts)中沒有包含服務器使用的 SSL 證書或中間證書。Java 使用這個信任庫來驗證服務器的證書鏈。
  • 自簽名證書:如果服務器使用的是自簽名證書,而不是由受信任的證書頒發(fā)機構(CA)簽發(fā)的證書,Java 默認不會信任這種證書。
  • 證書鏈不完整:服務器的 SSL 證書鏈不完整,缺少中間證書,導致 Java 無法構建完整的證書路徑。

解決方案

1. 將服務器證書添加到 Java 的信任庫

如果服務器使用的是自簽名證書或不受信任的證書,可以將該證書添加到 Java 的信任庫中。

步驟:

獲取服務器證書

  • 使用瀏覽器訪問目標 HTTPS 接口,導出服務器的 SSL 證書。
  • 或者使用 openssl 命令獲取證書:
openssl s_client -connect <服務器地址>:443 -showcerts

    將輸出中的證書部分保存為 .crt 文件。

    將證書導入 Java 信任庫

    • 找到 Java 的 cacerts 文件,通常位于 $JAVA_HOME/lib/security/cacerts
    • 使用 keytool 將證書導入信任庫:
    keytool -import -trustcacerts -file <證書文件> -keystore $JAVA_HOME/lib/security/cacerts -alias <別名>

    默認密碼是 changeit。

    重啟應用程序:確保應用程序重新加載信任庫。

    2. 忽略 SSL 證書驗證(不推薦)

    如果你在開發(fā)環(huán)境中,且不關心證書驗證,可以臨時忽略 SSL 證書驗證。注意:這種方法不安全,不推薦在生產環(huán)境中使用。

    步驟:

    自定義 RestTemplate:

    • 創(chuàng)建一個自定義的 SSLContext,忽略證書驗證。
    • 使用 NoopHostnameVerifier 忽略主機名驗證。
    import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
    import org.apache.hc.client5.http.impl.classic.HttpClients;
    import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder;
    import org.apache.hc.client5.http.ssl.NoopHostnameVerifier;
    import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactoryBuilder;
    import org.apache.hc.client5.http.ssl.TrustAllStrategy;
    import org.apache.hc.core5.ssl.SSLContextBuilder;
    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 java.security.KeyManagementException;
    import java.security.KeyStoreException;
    import java.security.NoSuchAlgorithmException;
    
    
    @Configuration
    public class RestTemplateConfig {
    
        @Bean
        public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
            return new RestTemplate(factory);
        }
    
        @Bean
        public ClientHttpRequestFactory simpleClientHttpRequestFactory() throws Exception {
            HttpComponentsClientHttpRequestFactory factory = generateHttpRequestFactory();
            factory.setConnectTimeout(15000);
            factory.setConnectionRequestTimeout(5000);
            return factory;
        }
    
        /**
         * 構造跳過SSL ClientHttp工廠
         *
         * @return
         * @throws NoSuchAlgorithmException
         * @throws KeyManagementException
         * @throws KeyStoreException
         */
        public static HttpComponentsClientHttpRequestFactory generateHttpRequestFactory()
                throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException {
            CloseableHttpClient httpclient = HttpClients.custom()
                    .setConnectionManager(PoolingHttpClientConnectionManagerBuilder.create()
                            .setSSLSocketFactory(SSLConnectionSocketFactoryBuilder.create()
                                    .setSslContext(SSLContextBuilder.create()
                                            .loadTrustMaterial(TrustAllStrategy.INSTANCE)
                                            .build())
                                    .setHostnameVerifier(NoopHostnameVerifier.INSTANCE)
                                    .build())
                            .build())
                    .build();
            HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
            factory.setHttpClient(httpclient);
            return factory;
        }
    }

    使用自定義的 RestTemplate:

    在調用 HTTPS 接口時,使用上述方法創(chuàng)建的 RestTemplate。

    3. 使用受信任的證書

    如果可能,建議使用由受信任的 CA 簽發(fā)的證書,而不是自簽名證書。這樣可以避免證書驗證問題。

    總結

    • 推薦方案:將服務器證書添加到 Java 的信任庫中,確保證書鏈完整且受信任。
    • 臨時方案:在開發(fā)環(huán)境中,可以臨時忽略 SSL 證書驗證,但不建議在生產環(huán)境中使用。
    • 最佳實踐:使用受信任的 CA 簽發(fā)的證書,確保 SSL/TLS 通信的安全性。

    到此這篇關于SpringBoot3使用RestTemplate請求接口忽略SSL證書的問題解決的文章就介紹到這了,更多相關SpringBoot3 RestTemplate忽略SSL證書內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

    相關文章

    • SpringBoot項目如何修改Tomcat版本號

      SpringBoot項目如何修改Tomcat版本號

      本文介紹了Spring Boot項目默認使用內嵌Tomcat Servlet容器打包部署,通過添加指定版本的Tomcat GA依賴,可以修改默認版本號,對于jar包和war包形式的部署,無需排除內置Tomcat,此經驗為個人見解,僅供參考
      2026-04-04
    • SpringCloud?Stream?快速入門實例教程

      SpringCloud?Stream?快速入門實例教程

      本文介紹了Spring?Cloud?Stream(SCS)組件在分布式系統(tǒng)中的作用,以及如何集成到Spring?Boot項目中,通過SCS,可以統(tǒng)一管理不同的消息隊列中間件,并提供了更高級的抽象,感興趣的朋友跟隨小編一起看看吧
      2025-11-11
    • SpringBoot中的bean管理示例詳解

      SpringBoot中的bean管理示例詳解

      這篇文章主要介紹了SpringBoot中的bean管理,本文結合示例代碼給大家講解的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
      2023-06-06
    • spring mvc 使用kaptcha配置生成驗證碼實例

      spring mvc 使用kaptcha配置生成驗證碼實例

      本篇文章主要介紹了spring mvc 使用kaptcha生成驗證碼實例,詳細的介紹了使用Kaptcha 生成驗證碼的步驟,有興趣的可以了解一下
      2017-04-04
    • java設計模式-裝飾者模式詳解

      java設計模式-裝飾者模式詳解

      這篇文章主要介紹了Java設計模式之裝飾者模式詳解和代碼實例,Decorator模式(別名Wrapper):動態(tài)將職責附加到對象上,若要擴展功能,裝飾者提供了比繼承更具彈性的代替方案,需要的朋友可以參考下
      2021-07-07
    • Spring MVC簡介_動力節(jié)點Java學院整理

      Spring MVC簡介_動力節(jié)點Java學院整理

      Spring MVC屬于SpringFrameWork的后續(xù)產品,已經融合在Spring Web Flow里面。今天先從寫一個Spring MVC的HelloWorld開始,讓我們看看如何搭建起一個Spring mvc的環(huán)境并運行程序,感興趣的朋友一起學習吧
      2017-08-08
    • Mybatis查詢Sql結果未映射到對應得實體類上的問題解決

      Mybatis查詢Sql結果未映射到對應得實體類上的問題解決

      使用mybatis查詢表數據得時候,發(fā)現(xiàn)對應得實體類字段好多都是null,本文主要介紹了Mybatis查詢Sql結果未映射到對應得實體類上的問題解決,具有一定的參考價值,感興趣的可以了解一下
      2024-02-02
    • 詳解如何在Spring Boot項目使用參數校驗

      詳解如何在Spring Boot項目使用參數校驗

      本篇文章主要介紹了如何在Spring Boot項目使用參數校驗,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
      2017-06-06
    • Spring Boot 非web應用程序的實現(xiàn)

      Spring Boot 非web應用程序的實現(xiàn)

      SpringBoot框架中,要創(chuàng)建一個非Web應用程序(純 Java 程序),有兩種方式,下面就來介紹一下,感興趣的可以來了解一下
      2025-03-03
    • JAVA異常分類和處理解析

      JAVA異常分類和處理解析

      這篇文章主要介紹了JAVA異常分類和處理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
      2019-08-08

    最新評論

    桑植县| 濮阳县| 娱乐| 黄石市| 盖州市| 独山县| 盐津县| 台前县| 天柱县| 延庆县| 广昌县| 仁寿县| 横山县| 柏乡县| 贡山| 宜丰县| 江永县| 凌云县| 治县。| 胶南市| 宜黄县| 东丰县| 保亭| 吐鲁番市| 汪清县| 福贡县| 通江县| 陇南市| 咸丰县| 佛学| 共和县| 兴义市| 保德县| 淮滨县| 治多县| 奉化市| 商南县| 天津市| 玛多县| 麻阳| 新乡县|