2017-12-28 2 views
0

아파치 패키지 commons-httpclient-3.1.jar을 사용할 때 아래의 로직을 사용하여 SSL 인증을 피하려고합니다. "javax.net.ssl.SSLHandshakeException : 에서 HTTPS 클라이언트 인증서 인증 오류 :org.apache.commons.httpclient를 사용할 때 ssl 인증을 무시하는 방법은 무엇입니까?

TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() { 
       public java.security.cert.X509Certificate[] getAcceptedIssuers() { 
        return null; 
       } 
       public void checkClientTrusted(X509Certificate[] certs, String authType) { 
       } 
       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() { 
      public boolean verify(String hostname, SSLSession session) { 
       return true; 
      } 
     }; 

     // Install the all-trusting host verifier 
     HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid); 

하지만 불행히도, 난 여전히 오류가있어 sun.security.validator.ValidatorException : PKIX 경로를 건물 실패 : sun.security.provider를 .Certpath.SunCertPathBuilderException "

위의 논리는 잘 작동하지 않지만 아래 논리를 추가하면 작동합니다. httpclient-4.3.3.jar을 선택합니다.

SSLContext ctx = SSLContext.getInstance("TLS"); 
    ctx.init(null, new TrustManager[] { xtm }, null); 
    SSLSocketFactory socketFactory = new SSLSocketFactory(ctx); 
    socketFactory.setHostnameVerifier(hostnameVerifier);    

계획 레지스터 MUST 것 같다 :

httpClient.getConnectionManager().getSchemeRegistry().register(new Scheme("https", socketFactory, 443)); 

세션 객체

이 DefaultHttpClient의 인스턴스,의 SocketFactory는에 의해 초기화됩니다.

그러나 패키지 공유 - httpclient-3.1.jar의 경우 스키마 등록 방법은 어떻게됩니까?

미리 감사드립니다.

답변

0

조사 후 다음과 같은 방법으로 요구 사항을 충족 할 수 있습니다.

Protocol easyhttps = new Protocol("https", (ProtocolSocketFactory)new EasySSLProtocolSocketFactory(), 443); 
Protocol.registerProtocol("https", easyhttps); 

EasySSLProtocolSocketFactory이 패키지에 평민 - HttpClient를-있는 contrib-3.1.jar

관련 문제