2012-02-17 4 views
1

서버에서 인증서 확인이 필요한 응용 프로그램을 개발 중입니다. 그것은 안드로이드 2.3 버전에서 잘 작동하지만 안드로이드 2.2는 나에게 예외 주었다 장치의 SSLSocket에서 InputStream를 검색 할 때Android 2.2 버전의 SSL 핸드 셰이크 오류

W/System.err(2116): java.io.IOException: SSL handshake failure: Failure in SSL library, usually a protocol error 
W/System.err(2116): error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure (external/openssl/ssl/s3_pkt.c:1053 0x3a5208:0x00000003) 
W/System.err(2116): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.nativeconnect(Native Method) 
W/System.err(2116): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:305) 
W/System.err(2116): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLInputStream.<init>(OpenSSLSocketImpl.java:502) 
W/System.err(2116): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.getInputStream(OpenSSLSocketImpl.java:443) 

이 오류는 BufferedInputStream을 온합니다.

여기
BufferedInputStream getSocketReader() throws IOException { 
BufferedInputStream bis = new BufferedInputStream(sslSocket.getInputStream(), 32768); 
     return bis; 
    } 

createEasySSLContext 내 현재 코드() 메소드입니다 :

private static SSLContext createEasySSLContext() throws IOException { 
    try { 
     SSLContext context = SSLContext.getInstance("TLS"); 
     KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); 
     keyManagerFactory.init(sampleKeystore, "password".toCharArray()); 

     CustomX509TrustManager trustManager = new CustomX509TrustManager(null); 
     context.init(keyManagerFactory.getKeyManagers(), new TrustManager[]{trustManager}, null); 
     return context; 
    } catch (Exception e) { 
     throw new IOException(e.getMessage()); 
    } 
} 

어떻게 이런 일이되는 코드는 아래에? 안드로이드 2.2 지원을 잃지 않고 고칠 수 있습니까? 고맙습니다.

+0

편집 : 이제는 2.2에서 작동하지 않습니다. 지금은 나를 위해 나에게 그 던지는 예외를 더 두통 :( – KnightCavalry

+0

했다 http://stackoverflow.com/questions/12405902/adding-certificate-for-android-2-2 – anshul

+0

나에게 도움을 주시기 바랍니다 너무 [HTTP ://stackoverflow.com/questions/12405902/adding-certificate-for-android-2-2][1] [1] : http://stackoverflow.com/questions/12405902/adding-certificate- for-android-2-2 – anshul

답변

1

더 많은 경우 서버 인증서를 발급 한 CA는 Android 2.1에서 신뢰하지 않을 수 있습니다. 새 인증서를 얻거나 CA 인증서가 포함 된 트러스트 스토어를 만들고이를 사용하도록 코드를 설정하십시오.

자세한 정보 및 샘플 코드 here.

+0

하지만 내 현재 코드는 서버 인증서 확인을 무시하고 있습니다. 테스트 용으로 만 수행합니다 .Android 2.1이 서버 인증서를 기본값으로 확인합니까? – KnightCavalry

+0

현재 코드를 보여줍니다. 서버 인증서를 실제로 무시하는 경우 , 그것은 수도 SSL 버그/비 호환성. 2.1에 일부가있었습니다. 서버 오류 로그를 사용하고 오류의 원인을 정확히 확인하십시오. –

+0

위의 질문을 편집했습니다. 보시다시피 CustomX509TrustManager() 매개 변수에 대한 KeyStore 참조를 제공하지 않습니다. 또한 CustomX509TrustManager 클래스 내에서 서버 인증서 확인을위한 코드를 구현하지 않았습니다. – KnightCavalry

0

서버에서 가져온 인증서가 2.1으로 인식되는 형식이 아닌 것 같습니다. 서버 단점을 사용하는 인증서 또는 암호 알고리즘을 변경하여이 문제를 해결할 수 있습니다.

관련 문제