2012-11-09 46 views
2

我這個頁面上看到怎麼辦HTTPS寧非同步HTTP客戶端如何接受任何證書

http://sonatype.github.com/async-http-client/ssl.html

但如果我只是想忽略和接受任何證書作爲在這樣的環境我不現在關注中間人,因爲它處於一個孤立的環境中,我只是在做一些對質量保證數據進行自動化測試的東西。

也許我的問題是如何在java的SSL堆棧中僞造SSL,以便接受另一端的任何證書(因爲它是https,所以不是雙向的)。

在上面的鏈接,客戶端的公共代碼是

char[] keyStorePassword = "changeit".toCharArray(); 
    KeyStore ks = KeyStore.getInstance("JKS"); 
    //ks.load(keyStoreStream, keyStorePassword); 

    char[] certificatePassword = "changeit".toCharArray(); 
    KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509"); 
    kmf.init(ks, certificatePassword); 

    KeyManager[] keyManagers = kmf.getKeyManagers(); 
    javax.net.ssl.TrustManager tm = new MyTrustMgr(); 
    javax.net.ssl.TrustManager[] trustManagers = new javax.net.ssl.TrustManager[]{tm }; 
    SecureRandom secureRandom = new SecureRandom(); 

    SSLContext ctx = SSLContext.getInstance("TLS"); 
    ctx.init(keyManagers, trustManagers, secureRandom); 
    return ctx; 

好,工作過的是,我發現這裏面仍然沒有工作因爲某種原因

X509TrustManager tm = new X509TrustManager() { 
     public void checkClientTrusted(X509Certificate[] xcs, 
       String string) throws CertificateException { 
     } 
     public void checkServerTrusted(X509Certificate[] xcs, 
       String string) throws CertificateException { 
     } 
     public X509Certificate[] getAcceptedIssuers() { 
      return null; 
     } 
    }; 

    SSLContext ctx = SSLContext.getInstance("TLS"); 
    ctx.init(null, new TrustManager[] { tm }, null); 
    return ctx; 

感謝, 院長

回答

0

晚了5年,但我今天面臨同樣的問題,你的問題在谷歌搜索中出現很高。所以也許我的回答會幫助別人。

以你創建的SSLContext的代碼,這個代碼將創建一個AsyncHttpClient會忽略(或盲目地接受)所有SSL證書:

AsyncHttpClientConfig config = new AsyncHttpClientConfig.Builder() 
      .setSSLContext(createSslContext()) 
      .build(); 

    httpClient = new AsyncHttpClient(config); 

的createSslContext方法是,如上面提到的,完全相同的副本&你在你的答案有代碼貼:

private SSLContext createSslContext() throws Exception { 
     X509TrustManager tm = new X509TrustManager() { 

      public void checkClientTrusted(X509Certificate[] xcs, 
             String string) throws CertificateException { 
      } 

      public void checkServerTrusted(X509Certificate[] xcs, 
             String string) throws CertificateException { 
      } 

      public X509Certificate[] getAcceptedIssuers() { 
       return null; 
      } 
     }; 

     SSLContext ctx = SSLContext.getInstance("TLS"); 
     ctx.init(null, new TrustManager[] { tm }, null); 
     return ctx; 
    } 

以上的例子與異步HTTP客戶端工作40年9月1日&的Java 1.8