2012-09-07 2 views
2

아파치 http 클라이언트를 기반으로하는 http 클라이언트가 있으며 SSL 인증서에 문제가없는 것으로 보입니다. 나는 세계적으로 인정받는 인증서와 자체 서명 된 인증서에 대한 단위 테스트를 커스텀 SSLSocketFactory와 함께 가지고있다.아파치 HTTP 클라이언트가있는 프록시를 통한 HTTP

그러나 프록시에서 동일한 코드를 실행하면 작동이 멈췄습니다. 계속이 두려운 예외가 계속 발생합니다.

javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated 
at com.sun.net.ssl.internal.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:352) 
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128) 
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:572) 
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180) 
at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:294) 
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:640) 
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:479) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805) 

나는 코드를 최소한으로 줄였으며 여전히 동일한 예외를 throw합니다. 코드 : 그것은 기본 SSL 설정을 사용하는 경우 아무 것도 지정되지 않은 경우

URI uri = new URI("https://www.google.com"); 
    DefaultHttpClient client = new DefaultHttpClient(); 
    client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, 
      new HttpHost("proxy.int", 8080, "https")); 

    HttpUriRequest request = new HttpGet(uri); 
    HttpResponse response = client.execute(request); 

나는 내가 명시 적으로뿐만 아니라 그것을 추가 확신하지 못했습니다 :

URI uri = new URI("https://www.google.com"); 
    DefaultHttpClient client = new DefaultHttpClient(); 
    client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, 
      new HttpHost("proxy.int", 8080, "https")); 

    client.getConnectionManager().getSchemeRegistry().register(
      new Scheme("https", 443, SSLSocketFactory.getSystemSocketFactory())); 

    HttpUriRequest request = new HttpGet(uri); 
    HttpResponse response = client.execute(request); 

가 나는 또한 시도 getSocketFactory() (안 그 차이가 getSystemSocketFactory()와는 완전히 다른지, 여전히 같은 오류입니다.

편집 :

프록시는 옵션 인증을 가지고 있는데로와하지 않고 모두 노력했다. 인증 정보는 다음 코드를 사용하여 설정되었습니다.

client.getCredentialsProvider().setCredentials(
     new AuthScope("proxy.int", 8080), 
     new UsernamePasswordCredentials("user", "password") 
    ); 

정확히 같은 오류입니다.

client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, 
     new HttpHost("proxy.int", 8080, "http")); 
+0

프록시 서버에 인증이 필요합니까 : – Santosh

+0

선택 인증이며 함께 사용해 보았습니다 (자세한 내용은 질문에 추가되었습니다). – nablex

답변

6

문제

난에 "http"대신 "https를"의 지정했다, 프록시 선언했다?