2012-11-09 3 views
2

내가이 페이지에 표시되는 모든 인증서를 승인하는 방법 그것은 격리 된 환경에 있기 때문에 지금 중간에 사람에 대해 신경을 써야하며 QA 데이터에 대한 자동화 된 테스트를 위해 몇 가지 일을하고 있습니다.닝 비동기 HTTP 클라이언트 그냥 무시하고 내가하지 않는이 환경에 어떠한 인증서를 수락 할 경우 HTTPS</p> <p><a href="http://sonatype.github.com/async-http-client/ssl.html" rel="nofollow">http://sonatype.github.com/async-http-client/ssl.html</a></p> <p>하지만 작업을 수행하는 방법을

어쩌면 내 질문은 다른 끝 (이것은 https 이후 양방향되지 않습니다)에있는 모든 인증서를 받아들이도록 java SSL 스택에서 SSL을 가짜 만드는 방법입니다.

위의 링크에서 클라이언트에 대한 공통 코드는

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 년이나 지났지 만, 오늘 같은 문제에 직면했으며 귀하의 질문이 Google 검색에서 꽤 높게 나타났습니다. 어쩌면 내 대답이 다른 사람을 도울 것입니다.

SSLContext에를 만드는 코드를 촬영,이 코드는 모든 SSL 인증서 무시 (또는 맹목적으로 수용) 것 AsyncHttpClient 만듭니다 : 위에서 언급 한 바와 같이,

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 클라이언트와 함께 작동 1.9.40 & 자바 1.8