2013-03-22 2 views
0

HttpsURLConnection을 사용하여 HTTPS 요청을하고 있습니다.HTTPS 요청을 수행하는 동안 신뢰할 수없는 인증서 예외에 대응하는 방법?

연락하려는 서버에 자체 서명 인증서가있어 논리적으로 요청이 실패하게됩니다.

그러나 실패로 인해 내 프로그램에 신호가 보내지지 않습니다. 그냥 실패하고 나는 logcat에서 왜 볼 수 있습니다. 인증서를 신뢰할 가능성이되지 않음을 나타내는 대화 상자가 팝업 : 내가 않는 브라우저처럼 반응하는 내 프로그램 싶습니다, 이상적으로

HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); 
connection.setUseCaches(false); 
connection.setAllowUserInteraction(false); 
connection.connect(); 

: 여기

03-22 17:54:35.203: W/System.err(21147): javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. 
03-22 17:54:35.203: W/System.err(21147): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:381) 

내가 요청에 사용하는 코드입니다 일부 키 저장소에 추가하고 요청을 다시 시도하십시오.

하지만 예외를 얻는 방법을 알 수 없으므로 여기서는 무엇을 해야할지 잘 모릅니다.

단서가 있습니까?

+1

의 유효성을 검사하는 사용자 정의 TrustManager을 설정에 대해 설명하고있다? http://stackoverflow.com/questions/2012497/accepting-a-certificate-for-https-on-android?rq=1 – petey

답변

2

동안, 당신은 절대적으로 단지 맹목적으로 모든 SSL 인증서를 승인해서는 안된다.

니콜라이 Elenikov는 an excellent blog post 방법이 시도 않았다 같은 인증서

+0

자원에 감사드립니다. 나는 참으로 모든 인증서를 맹목적으로 받아들이지 않을 것입니다. 그것은 단지 바보 일 것입니다. 왜 그렇게 많은 사람들이 HTTPS를 사용하는 모든 목적을 저지하는 그러한 "솔루션"을 계속 제안하는지 모르겠습니다. 링크 된 블로그 게시물의 주석은 내가 원하는 것을 정확히 물었습니다 (즉, 사용자가 선택할 수 있도록 검사를 위해 신뢰할 수없는 인증서 개체를 얻는 방법). – ereOn

-4

당신은 이런 식으로 작업을 수행 할 수 있습니다 거대한가 사용자 정의 TrustManager을 구현하는 데 필요한 올바른

SSLContext sc = SSLContext.getInstance("TLS"); 
TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { 
    public X509Certificate[] getAcceptedIssuers() { 
     return null; 
    } 
    @Override 
    public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { 
     return; 
} 
    @Override 
    public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { 
     return; 
    } 
} }; 
sc.init(null, trustAllCerts, new SecureRandom()); 
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); 
HttpURLConnection = connection = endPoint.openConnection(); 
+2

모든 SSL 인증서를 수락하는 것과 같이 보안을 무시하는 솔루션은 사용하지 않는 것이 좋습니다. – CommonsWare

관련 문제