<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      代碼改變世界

      【踩坑系列】使用httpclient調(diào)用第三方接口返回javax.net.ssl.SSLHandshakeException異常

      2025-03-27 10:57  申城異鄉(xiāng)人  閱讀(238)  評論(0)    收藏  舉報

      1. 踩坑經(jīng)歷

      最近做了個需求,需要調(diào)用第三方接口獲取數(shù)據(jù),在聯(lián)調(diào)時一直失敗,代碼拋出javax.net.ssl.SSLHandshakeException異常,

      具體錯誤信息如下所示:

      javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

      2.原因分析

      因為調(diào)用第三方接口的代碼是復用項目中原有的工具類(基于httpclient封裝),所以在確認完傳參沒問題后,第一時間排除了編碼問題。

      然后開始懷疑第三方提供的接口地址(因為竟然是IP+端口訪問),在和第三方確認沒有域名訪問后,在瀏覽器里輸入第三方的接口地址,發(fā)現(xiàn)證書有問題:

      又使用Postman調(diào)用第三方接口,也是失敗,提示自簽名證書:

      通過以上分析,可以發(fā)現(xiàn)出現(xiàn)該問題的根本原因是Java客戶端不信任目標服務器的SSL證書,比如這個第三方使用的自簽名證書。

      3.解決方案

      解決方案一般有2種,第1種方案是將服務器證書導入Java信任庫,第2種方案是繞過SSL驗證,這里采用第2種方案。

      首先,新建HttpClient工具類:

      import org.apache.http.conn.ssl.NoopHostnameVerifier;
      import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
      import org.apache.http.impl.client.CloseableHttpClient;
      import org.apache.http.impl.client.HttpClients;
      
      import javax.net.ssl.SSLContext;
      import javax.net.ssl.TrustManager;
      import javax.net.ssl.X509TrustManager;
      import java.security.KeyManagementException;
      import java.security.NoSuchAlgorithmException;
      import java.security.cert.X509Certificate;
      
      public class HttpClientUtils {
          public static CloseableHttpClient createIgnoreCertClient() throws NoSuchAlgorithmException, KeyManagementException {
              SSLContext sslContext = SSLContext.getInstance("SSL");
              sslContext.init(null, new TrustManager[]{new X509TrustManager() {
                  @Override
                  public X509Certificate[] getAcceptedIssuers() {
                      return null;
                  }
      
                  @Override
                  public void checkClientTrusted(X509Certificate[] certs, String authType) {
                  }
      
                  @Override
                  public void checkServerTrusted(X509Certificate[] certs, String authType) {
                  }
              }}, new java.security.SecureRandom());
              SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
              return HttpClients.custom().setSSLSocketFactory(sslConnectionSocketFactory).build();
          }
      }
      

      然后將原來聲明httpClient的代碼改為如下所示:

      CloseableHttpClient httpClient = HttpClientUtils.createIgnoreCertClient();
      

      注意事項:

      確保項目中引入了httpclient依賴:

      <dependency>
          <groupId>org.apache.httpcomponents</groupId>
          <artifactId>httpclient</artifactId>
          <version>4.5.13</version>
      </dependency>
      

      文章持續(xù)更新,歡迎關注微信公眾號「申城異鄉(xiāng)人」第一時間閱讀!

      主站蜘蛛池模板: 亚洲高清国产成人精品久久| 2019国产精品青青草原| 国产日韩综合av在线| 久久96热在精品国产高清| 亚洲天堂av在线免费看| 好紧好滑好湿好爽免费视频| 久久丫精品久久丫| 亚洲码亚洲码天堂码三区| 欧美成人精品手机在线| 欧美寡妇xxxx黑人猛交| 北岛玲中文字幕人妻系列| 99热国产这里只有精品9| 国产女人被狂躁到高潮小说| 精品亚洲国产成人性色av| 国产三级精品三级在线区| 国产成人无码www免费视频播放| 丰满人妻熟妇乱精品视频| 中文人妻AV大区中文不卡| 国产国产午夜福利视频| AV在线亚洲欧洲日产一区二区| √8天堂资源地址中文在线| 亚洲av免费看一区二区| 国产精品普通话国语对白露脸| 一区二区三区不卡国产| 中文字幕久无码免费久久| 日韩无码视频网站| 日韩精品中文字幕有码| 亚洲综合色网一区二区三区| 99久久精品费精品国产一区二区| 国产高清国产精品国产专区| 午夜成人无码免费看网站| 同江市| 精品国产亚洲午夜精品a| 亚洲国产精品人人做人人爱| 精品国偷自产在线视频99| 国产成人亚洲精品日韩激情| 午夜国产小视频| 亚洲最大成人美女色av| 99久久久国产精品免费无卡顿| 日韩乱码人妻无码中文字幕视频| 大又大又粗又硬又爽少妇毛片|