HTTPS与自签名证书产生握手错误

HTTPS与自签名证书产生握手错误

问题描述:

我试图通过Android的HttpClient与自签名客户端和服务器证书连接到HTTPS Web服务器。证书和私钥都存储在PKCS#12密钥库中。HTTPS与自签名证书产生握手错误

我使用this example与差异加载密钥库:

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

密钥库正确加载因为我能列出所有证书在里面。

但是,在执行GET请求时,我得到:

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) 

我在Nexus S采用OS 2.3.4和HTC Desire采用OS 2.2测试这一点,也与OS 2.1模拟器。他们都产生相同的错误。我看着s3_pkt.c:1053,但不明白问题可能出在哪里。

任何想法?

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证书和用户证书。 “信任库”只是原始示例中变量的名称。 –

+0

+1您说得对:我需要设置密钥库并分别设置信任库。它们是相同的文件,但是您必须将其设置两次。 –