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());
您似乎有您的密钥库和您的信任库混淆。密钥库包含您的私钥和证书。信任库包含其他人的证书。
我不是这方面的专家,但看起来java.security.Keystore可以包含所有的证书和私钥:http://download.oracle.com/javase/6/docs/api/java/security /KeyStore.html –
我的密钥库从PKCS#12文件(.p12)加载,当然可以。我列出了所有条目,它们是:私钥,CA证书和用户证书。 “信任库”只是原始示例中变量的名称。 –
+1您说得对:我需要设置密钥库并分别设置信任库。它们是相同的文件,但是您必须将其设置两次。 –