2011-09-07 4 views
0

자체 서명 된 클라이언트 및 서버 인증서를 사용하여 Android의 HttpClient을 통해 HTTPS 웹 서버에 연결하려고합니다. cert와 개인 키는 모두 PKCS # 12 키 스토어에 저장됩니다.자체 서명 된 인증서가있는 HTTPS가 핸드 셰이크 오류를 발생합니다.

나는 키 스토어를로드의 차이 this example을 사용하고 있습니다 :

KeyStore trustStore = KeyStore.getInstance("PKCS12"); 
trustStore.load(new FileInputStream(keystoreFile), "mypass".toCharArray()); 

키 스토어로드를 제대로 내가 모든 인증서 표시를 나열 할 수 있어요한다. GET 요청을 실행할 때

는하지만, 내가 얻을 : 나는 OS 2.2 OS 2.3.4와 HTC 디자 이어와 넥서스 S에이를 테스트하고 또한 OS 2.1 에뮬레이터있어

09-07 22:01:05.197: ERROR/TTT(3716): IOException: java.io.IOException: 
SSL handshake failure: Failure in SSL library, usually a protocol error 
error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure 
(external/openssl/ssl/s3_pkt.c:1127 0x2e3b40:0x00000003) 

. 그것들은 모두 같은 오류를냅니다. s3_pkt.c:1053을 보았지만 문제가 무엇인지 이해할 수 없었습니다.

아이디어가 있으십니까?

답변

2
trustStore.load(new FileInputStream(keystoreFile), "mypass".toCharArray()); 

키 저장소와 신뢰 저장소를 혼동하는 것 같습니다. 키 저장소에는 개인 키와 인증서가 들어 있습니다. 트러스트 스토어에는 다른 사람의 인증서가 들어 있습니다.

+1

저는 전문가는 아니지만 java.security.Keystore에 모든 인증서와 개인 키가 포함될 수 있습니다. http://download.oracle.com/javase/6/docs/api/java/security /KeyStore.html –

+0

PKCS # 12 파일 (.p12)에서로드 된 키 저장소가 확실합니다. 모든 항목이 나열되어 있으며 개인 키, CA 인증서 및 사용자 인증서가 있습니다. "truststore"는 원래 예제의 변수 이름입니다. –

+0

+1 당신이 옳았다 : 나는 키 스토어와 별도로 트러스트 스토어를 설정해야한다. 두 파일은 같은 파일이지만 두 번 설정해야합니다. –

관련 문제