Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 具有自签名证书的HTTPS产生握手错误_Android_Ssl_Https_Certificate - Fatal编程技术网

Android 具有自签名证书的HTTPS产生握手错误

Android 具有自签名证书的HTTPS产生握手错误,android,ssl,https,certificate,Android,Ssl,Https,Certificate,我正试图通过Android的HttpClient连接到HTTPS web服务器,并使用自签名客户端和服务器证书。证书和私钥都存储在PKCS#12密钥库中 我在加载密钥库时使用的是不同的: KeyStore trustStore = KeyStore.getInstance("PKCS12"); trustStore.load(new FileInputStream(keystoreFile), "mypass".toCharArray()); 密钥库正确加载,因为我可以列出其中的所有证书 但是

我正试图通过Android的
HttpClient
连接到HTTPS web服务器,并使用自签名客户端和服务器证书。证书和私钥都存储在PKCS#12密钥库中

我在加载密钥库时使用的是不同的:

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)
我正在用操作系统2.3.4在Nexus S上测试这个,用操作系统2.2在HTC Desire上测试这个,还用操作系统2.1在emulator上测试这个。它们都产生相同的错误。我看了一下,但不明白是什么问题

有什么想法吗

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

您似乎对密钥库和信任库感到困惑。密钥库包含您的私钥和证书。信任库包含其他人的证书。

我不是这方面的专家,但java.security.Keystore似乎可以包含所有证书和私钥:从PKCS#12文件(.p12)加载的密钥库确实可以。我列出了所有条目,它们是:私钥、CA证书和用户证书。“信任库”只是原始示例中变量的名称。+1您是对的:我需要分别设置密钥库和信任库。它们是同一个文件,但您必须设置两次。@Peter Knego从技术上讲,它们是同一种文件,但从安全角度看,它们应该是两个独立的文件。这就是为什么它都是这样指定的。密钥库包含您的私钥,并且应该具有非常高的安全性,因为它是您的身份。信任库只包含其他人的公共证书,它们没有任何安全性。在大型组织中,有权修改密钥库的人员与有权修改信任库的人员不同。