2012-11-09 45 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