亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2025年10月23日 09:27:00   作者:小猿、  
本文主要介紹了SpringBoot3使用RestTemplate請(qǐng)求接口忽略SSL證書(shū)的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(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類(lèi)可能會(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 證書(shū)。

具體原因如下:

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

解決方案

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

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

步驟:

獲取服務(wù)器證書(shū)

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

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

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

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

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

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

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

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

    步驟:

    自定義 RestTemplate:

    • 創(chuàng)建一個(gè)自定義的 SSLContext,忽略證書(shū)驗(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)造跳過(guò)SSL ClientHttp工廠(chǎng)
         *
         * @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. 使用受信任的證書(shū)

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

    總結(jié)

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

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

    相關(guān)文章

    最新評(píng)論