日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java中远程连接忽略证书_忽略Java中的自签名证书

發布時間:2023/12/3 java 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中远程连接忽略证书_忽略Java中的自签名证书 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java中遠程連接忽略證書

我在職業生涯中遇到過幾次問題,就是我們有時希望允許自簽名證書用于開發或測試目的。 Google的快速搜索顯示了多年來無數Java開發人員遇到的麻煩。

根據確切的證書問題,您可能會收到類似以下內容之一的錯誤,盡管我幾乎肯定有其他表現形式:

java.security.cert.CertificateException: Untrusted Server Certificate Chainjavax.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

要解決此問題,通常需要修改JDK信任庫文件,這可能會很痛苦,而且常常會遇到麻煩。 最重要的是,您團隊中的每個開發人員都必須做同樣的事情,并且您在每個新環境中都會遇到相同的問題。

幸運的是,有一種方法可以以通用的方式解決問題,而不會給開發人員帶來任何負擔。 我們將重點介紹普通的HttpURLConnection類型的連接,因為它是最通用的類??型,仍應幫助您了解其他庫的使用方向。 如果您使用的是Apache HttpClient,請參見此處 。

警告:知道您在做什么!

請注意使用此代碼的含義:這意味著您完全不關心主機驗證,而僅使用SSL來加密通信。 您不是要防止中間人攻擊,也不是要確保您已連接到您認為是的主機。 通??梢詺w結為以下幾種有效情況:

  • 您在鎖定的LAN環境中操作。 您不容易受到攻擊者攔截的請求(或者,如果存在,則問題更大)。
  • 您所處的測試或開發環境中,確保通信安全并不重要。
  • 如果這符合您的需求,請繼續進行。 否則,也許要三思而后行地想要完成什么。

    解決方案:修改信任管理器

    既然我們已經放棄了這個免責聲明,我們就可以解決當前的實際問題。 Java允許我們控制負責驗證HttpsURLConnection的主機和證書的對象。 這可以在全球范圍內完成,但是我敢肯定,有經驗的人會畏縮于做出如此徹底的改變的想法。 幸運的是,我們還可以根據每個請求進行操作,并且由于很難在網絡上找到此類示例,因此我在下面提供了代碼。 這種方法很好,因為您無需在全球范圍內換掉SSLSocketFactory實現。

    隨時獲取它并在您的項目中使用它。

    package com.mycompany.http;import java.net.*; import javax.net.ssl.*; import java.security.*; import java.security.cert.*;public class TrustModifier {private static final TrustingHostnameVerifierTRUSTING_HOSTNAME_VERIFIER = new TrustingHostnameVerifier();private static SSLSocketFactory factory;/** Call this with any HttpURLConnection, and it willmodify the trust settings if it is an HTTPS connection. */public static void relaxHostChecking(HttpURLConnection conn)throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException {if (conn instanceof HttpsURLConnection) {HttpsURLConnection httpsConnection = (HttpsURLConnection) conn;SSLSocketFactory factory = prepFactory(httpsConnection);httpsConnection.setSSLSocketFactory(factory);httpsConnection.setHostnameVerifier(TRUSTING_HOSTNAME_VERIFIER);}}static synchronized SSLSocketFactoryprepFactory(HttpsURLConnection httpsConnection)throws NoSuchAlgorithmException, KeyStoreException, KeyManagementException {if (factory == null) {SSLContext ctx = SSLContext.getInstance("TLS");ctx.init(null, new TrustManager[]{ new AlwaysTrustManager() }, null);factory = ctx.getSocketFactory();}return factory;}private static final class TrustingHostnameVerifier implements HostnameVerifier {public boolean verify(String hostname, SSLSession session) {return true;}}private static class AlwaysTrustManager implements X509TrustManager {public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { }public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { }public X509Certificate[] getAcceptedIssuers() { return null; }}}

    用法

    要使用上面的代碼,只需在打開流之前調用RelaxHostChecking()方法即可:

    URL someUrl = ... // may be HTTPS or HTTP HttpURLConnection connection = (HttpURLConnection) someUrl.openConnection(); TrustModifier.relaxHostChecking(connection); // here's where the magic happens// Now do your work! // This connection will now live happily with expired or self-signed certificates connection.setDoOutput(true); OutputStream out = connection.getOutputStream(); ...

    在那里,它是支持自簽名證書的本地化方法的完整示例。 這不會影響您的應用程序的其余部分,而其余部分將繼續具有嚴格的托管檢查語義。 可以擴展此示例以使用配置設置來確定是否應使用寬松的主機檢查,并且如果使用此代碼主要是通過自簽名證書進行開發的一種方式,我建議您這樣做。

    參考:在Carfey Software Blog上, 忽略了我們JCG合作伙伴提供的Java自簽名證書 。

    相關文章 :
    • 使用Spring Security 3.1保護RESTful Web服務
    • 使用Spring Security保護GWT應用程序的安全
    • JBoss 4.2.x Spring 3 JPA Hibernate教程
    • 調試生產服務器– Eclipse和JBoss展示
    • Java EE6 CDI,命名組件和限定符
    • Java教程和Android教程列表

    翻譯自: https://www.javacodegeeks.com/2011/12/ignoring-self-signed-certificates-in.html

    java中遠程連接忽略證書

    總結

    以上是生活随笔為你收集整理的java中远程连接忽略证书_忽略Java中的自签名证书的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。