欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot3使用RestTemplate請(qǐng)求接口忽略SSL證書的問題解決

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

概述

我在項(xiàng)目中使用SpringBoot3版本+中RestTemplate請(qǐng)求接口時(shí)候報(bào)錯(cuò):

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

注意:springBoot3版本+RestTemplate對(duì)應(yīng)的是spring-web-6.+版本舊版本不適用以下解決方案,構(gòu)建RestTemplateConfigl類可能會(huì)找不到對(duì)應(yīng)方法?。?!

錯(cuò)誤原因

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

具體原因如下:

  • 證書不受信任:Java 的默認(rèn)信任庫(kù)(cacerts)中沒有包含服務(wù)器使用的 SSL 證書或中間證書。Java 使用這個(gè)信任庫(kù)來(lái)驗(yàn)證服務(wù)器的證書鏈。
  • 自簽名證書:如果服務(wù)器使用的是自簽名證書,而不是由受信任的證書頒發(fā)機(jī)構(gòu)(CA)簽發(fā)的證書,Java 默認(rèn)不會(huì)信任這種證書。
  • 證書鏈不完整:服務(wù)器的 SSL 證書鏈不完整,缺少中間證書,導(dǎo)致 Java 無(wú)法構(gòu)建完整的證書路徑。

解決方案

1. 將服務(wù)器證書添加到 Java 的信任庫(kù)

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

步驟:

獲取服務(wù)器證書

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

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

    將證書導(dǎo)入 Java 信任庫(kù)

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

    默認(rèn)密碼是 changeit。

    重啟應(yīng)用程序:確保應(yīng)用程序重新加載信任庫(kù)。

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

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

    步驟:

    自定義 RestTemplate:

    • 創(chuàng)建一個(gè)自定義的 SSLContext,忽略證書驗(yàn)證。
    • 使用 NoopHostnameVerifier 忽略主機(jī)名驗(yàn)證。
    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;
        }
    
        /**
         * 構(gòu)造跳過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:

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

    3. 使用受信任的證書

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

    總結(jié)

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

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

    相關(guān)文章

    • java 微信隨機(jī)紅包算法代碼實(shí)例

      java 微信隨機(jī)紅包算法代碼實(shí)例

      這篇文章主要介紹了java 微信隨機(jī)紅包算法的相關(guān)資料,并附實(shí)例代碼,需要的朋友可以參考下
      2016-10-10
    • 一文理清什么是BIO以及如何使用

      一文理清什么是BIO以及如何使用

      這篇文章主要介紹了什么是BIO以及如何使用,BIO英文全名是blockingIO,也叫做阻塞IO,是最容易理解、最容易實(shí)現(xiàn)的IO工作方式,本文就來(lái)通過一些簡(jiǎn)單的示例為大家講講BIO吧,需要的朋友可以參考下
      2023-10-10
    • springboot項(xiàng)目中引入本地依賴jar包并打包到lib文件夾中

      springboot項(xiàng)目中引入本地依賴jar包并打包到lib文件夾中

      這篇文章主要介紹了springboot項(xiàng)目中引入本地依賴jar包,如何打包到lib文件夾中,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
      2023-04-04
    • MyBatis編寫嵌套子查詢的動(dòng)態(tài)SQL實(shí)踐詳解

      MyBatis編寫嵌套子查詢的動(dòng)態(tài)SQL實(shí)踐詳解

      在Java生態(tài)中,MyBatis作為一款優(yōu)秀的ORM框架,廣泛應(yīng)用于數(shù)據(jù)庫(kù)操作,本文將深入探討如何在MyBatis中編寫嵌套子查詢的動(dòng)態(tài)SQL,并結(jié)合實(shí)際案例分析其應(yīng)用場(chǎng)景與實(shí)現(xiàn)技巧
      2025-06-06
    • springmvc與mybatis集成配置實(shí)例詳解

      springmvc與mybatis集成配置實(shí)例詳解

      這篇文章主要介紹了springmvc與mybatis集成配置實(shí)例詳解的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
      2016-09-09
    • 2023最新版本idea用maven新建web項(xiàng)目(親測(cè)不報(bào)錯(cuò))

      2023最新版本idea用maven新建web項(xiàng)目(親測(cè)不報(bào)錯(cuò))

      這篇文章主要給大家介紹了關(guān)于2023最新版本idea用maven新建web項(xiàng)目,Maven是當(dāng)今Java開發(fā)中主流的依賴管理工具,文中介紹的步驟親測(cè)不報(bào)錯(cuò),需要的朋友可以參考下
      2023-07-07
    • Spring boot中限制 Mybatis SQL日志的大字段輸出問題

      Spring boot中限制 Mybatis SQL日志的大字段輸出問題

      文章介紹Springboot中MyBatis SQL日志因大字段輸出導(dǎo)致日志膨脹及JVM內(nèi)存問題,建議通過Logback或Log4j2自定義Converter/Filter實(shí)現(xiàn)參數(shù)截?cái)嗷蛎撁?或調(diào)整日志級(jí)別限制調(diào)試信息,本文給大家介紹Spring boot中限制Mybatis SQL日志的大字段輸出問題,感興趣的朋友一起看看吧
      2025-10-10
    • java報(bào)錯(cuò):“錯(cuò)誤:編碼GBK?的不可映射字符”解決辦法

      java報(bào)錯(cuò):“錯(cuò)誤:編碼GBK?的不可映射字符”解決辦法

      當(dāng)Java源代碼中包含中文字符時(shí),我們?cè)谟胘avac編譯時(shí)會(huì)出現(xiàn)“錯(cuò)誤:編碼GBK的不可映射字符”,這篇文章主要給大家介紹了關(guān)于java報(bào)錯(cuò):“錯(cuò)誤:編碼GBK?的不可映射字符”的解決辦法,需要的朋友可以參考下
      2024-08-08
    • Java并發(fā)編程之常用的多線程實(shí)現(xiàn)方式分析

      Java并發(fā)編程之常用的多線程實(shí)現(xiàn)方式分析

      這篇文章主要介紹了Java并發(fā)編程之常用的多線程實(shí)現(xiàn)方式,結(jié)合實(shí)例形式分析了java并發(fā)編程中多線程的相關(guān)原理、實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下
      2020-02-02
    • springboot讀取bootstrap配置及knife4j版本兼容性問題及解決

      springboot讀取bootstrap配置及knife4j版本兼容性問題及解決

      這篇文章主要介紹了springboot讀取bootstrap配置及knife4j版本兼容性問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
      2024-06-06

    最新評(píng)論