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

java后端訪問https證書的問題及解決

 更新時間:2022年10月27日 11:02:40   作者:阿拉的夢想  
這篇文章主要介紹了java后端訪問https證書的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

java后端通過https獲取圖片

? ? public static void main(String[] args) {
? ? ? ? try {
? ? ? ? ? ? BufferedImage image = ImageIO.read(new URL("https://10.128.33.56:6202/object/download?pool=s_alarm&id=2dfa47ccaa56ca64c66078588977532e,360,b43e").openStream());
? ? ? ? ? ? //輸出流
? ? ? ? ? ? ByteArrayOutputStream stream = new ByteArrayOutputStream();
? ? ? ? ? ? ImageIO.write(image, "jpg", stream);
? ? ? ? ? ? String str = Base64.encodeBase64String(stream.toByteArray()).replaceAll(" ", "+").replaceAll("\r|\n", "");
? ? ? ? ? ? System.out.println(str);
? ? ? ? } catch (Exception e) {
? ? ? ? ? ?log.error("獲取圖片異常",e);
? ? ? ? }
? ? }

報錯如下

因為沒有安裝證書

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
    at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:150)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1476)
    at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:174)
    at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:168)
    at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:846)
    at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:106)
    at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:495)
    at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:433)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:815)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1025)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1038)
    at InstallCert.main(InstallCert.java:63)
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:221)
    at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:145)
    at sun.security.validator.Validator.validate(Validator.java:203)
    at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:172)
    at InstallCert$SavingTrustManager.checkServerTrusted(InstallCert.java:158)
    at com.sun.net.ssl.internal.ssl.JsseX509TrustManager.checkServerTrusted(SSLContextImpl.java:320)
    at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:839)
    ... 7 more

安裝證書,解決

1.瀏覽器訪問此地址,點擊證書

2.下載證書

3.將證書復制到jdk目錄

D:\program\Java\jdk1.8.0_271\jre\lib\security 下面

  • 安裝證書:keytool -import -alias abc -keystore cacerts -file img_https.cer -storepass changeit
  • 刪除證書:keytool -delete -keystore cacerts -file img_https.cer -storepass changeit

安裝完成。

然后又報錯

javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names matching IP address 10.128.33.56 found
    at sun.security.ssl.Alert.createSSLException(Alert.java:131)
    at sun.security.ssl.TransportContext.fatal(TransportContext.java:353)
    at sun.security.ssl.TransportContext.fatal(TransportContext.java:296)
    at sun.security.ssl.TransportContext.fatal(TransportContext.java:291)
    at sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:652)
    at sun.security.ssl.CertificateMessage$T12CertificateConsumer.onCertificate(CertificateMessage.java:471)
    at sun.security.ssl.CertificateMessage$T12CertificateConsumer.consume(CertificateMessage.java:367)
    at sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:376)
    at sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:444)
    at sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:422)
    at sun.security.ssl.TransportContext.dispatch(TransportContext.java:183)
    at sun.security.ssl.SSLTransport.decode(SSLTransport.java:154)
    at sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1279)
    at sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1188)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:401)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:373)
    at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:587)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1570)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1498)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:268)
    at java.net.URL.openStream(URL.java:1067)
    at cn.cloudwalk.util.ImageUtils.main(ImageUtils.java:73)
Caused by: java.security.cert.CertificateException: No subject alternative names matching IP address 10.128.33.56 found
    at sun.security.util.HostnameChecker.matchIP(HostnameChecker.java:173)
    at sun.security.util.HostnameChecker.match(HostnameChecker.java:99)
    at sun.security.ssl.X509TrustManagerImpl.checkIdentity(X509TrustManagerImpl.java:441)
    at sun.security.ssl.X509TrustManagerImpl.checkIdentity(X509TrustManagerImpl.java:422)
    at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:228)
    at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:128)
    at sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:636)
    ... 18 common frames omitted

解決

類中加入下面代碼,靜態(tài)塊中,程序啟動就運行;

測試發(fā)現(xiàn),用下面代碼禁用SSL驗證,不用導入證書也可正常運行。

 static {
        disableSslVerification();
    }

    private static void disableSslVerification() {
        try
        {
            // Create a trust manager that does not validate certificate chains
            TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
                @Override
                public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                    return null;
                }
                @Override
                public void checkClientTrusted(X509Certificate[] certs, String authType) {
                }
                @Override
                public void checkServerTrusted(X509Certificate[] certs, String authType) {
                }
            }
            };

            // Install the all-trusting trust manager
            SSLContext sc = SSLContext.getInstance("SSL");
            sc.init(null, trustAllCerts, new java.security.SecureRandom());
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

            // Create all-trusting host name verifier
            HostnameVerifier allHostsValid = new HostnameVerifier() {
                @Override
                public boolean verify(String hostname, SSLSession session) {
                    return true;
                }
            };

            // Install the all-trusting host verifier
            HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (KeyManagementException e) {
            e.printStackTrace();
        }
    }

這樣就可以正常訪問到https的資源了。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • SpringBoot生成PDF的方法

    SpringBoot生成PDF的方法

    生成PDF是一種常見的需求,本文主要介紹了SpringBoot生成PDF的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-05-05
  • java?fastjson傳輸long數(shù)據(jù)卻接收到了int的問題

    java?fastjson傳輸long數(shù)據(jù)卻接收到了int的問題

    這篇文章主要介紹了java?fastjson傳輸long數(shù)據(jù)卻接收到了int的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java中定時任務的全方位場景實現(xiàn)思路分析

    Java中定時任務的全方位場景實現(xiàn)思路分析

    在開發(fā)過程中,根據(jù)需求和業(yè)務的不同經(jīng)常會有很多場景需要用到不同特性的定時任務,本文將針對這些場景,提供不同的一個實現(xiàn)思路,感興趣的小伙伴快跟隨小編一起學習一下吧
    2023-12-12
  • Java獲取文件的hash值(SHA256)兩種方式

    Java獲取文件的hash值(SHA256)兩種方式

    這篇文章主要給大家介紹了關于Java獲取文件hash值(SHA256)的兩種方式,SHA256是一種哈希算法,它是不可逆的,也就是說無法解密,需要的朋友可以參考下
    2023-09-09
  • 解決執(zhí)行maven命令時提示Process terminated的問題

    解決執(zhí)行maven命令時提示Process terminated的問題

    這篇文章主要介紹了解決執(zhí)行maven命令時提示Process terminated的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 淺談一下Java中的ReentrantLock

    淺談一下Java中的ReentrantLock

    這篇文章主要介紹了淺談一下Java中的ReentrantLock,這個類是JUC工具包中對線程安全問題提供的一種解決方案,它主要是用來給對象上鎖,保證同一時間這能有一個線程在訪問當前對象,需要的朋友可以參考下
    2023-09-09
  • Java守護線程和用戶線程的區(qū)別

    Java守護線程和用戶線程的區(qū)別

    這篇文章主要介紹了Java守護線程和用戶線程的區(qū)別,用戶線程和守護線程,默認情況下我們創(chuàng)建的線程或線程池都是用戶線程,所以用戶線程也被稱之為普通線程,下文更多詳細內容需要的小伙伴可以參考一下
    2022-05-05
  • java實現(xiàn)文件變化監(jiān)控的方法(推薦)

    java實現(xiàn)文件變化監(jiān)控的方法(推薦)

    下面小編就為大家?guī)硪黄猨ava實現(xiàn)文件變化監(jiān)控的方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • MyBatis延遲加載實現(xiàn)步驟詳解

    MyBatis延遲加載實現(xiàn)步驟詳解

    這篇文章主要介紹了MyBatis延遲加載實現(xiàn)步驟詳解,? MyBatis中的延遲加載,也成為懶加載,是指在進行關聯(lián)查詢時,按照設置的延遲規(guī)則推遲對關聯(lián)對象的查詢,延遲加載可以有效的減少數(shù)據(jù)庫的壓力,需要的朋友可以參考下
    2023-10-10
  • SpringCloud搭建Eureka服務模塊的過程

    SpringCloud搭建Eureka服務模塊的過程

    Eureka在分布式系統(tǒng)中起到了連接各個微服務的紐帶作用,使得服務之間的交互變得更加靈活、可靠,本文將深入探討如何使用Spring?Cloud,逐步引導讀者完成Eureka服務模塊的搭建,感興趣的朋友跟隨小編一起看看吧
    2024-02-02

最新評論