SSL无法在Android 2.2上运行(仅限2.3)

我在调用httpsURLConnection.getInputStream()时在LogCat上得到这个

SSL握手失败:SSL库失败,通常是协议错误错误:14094412:SSL例程:SSL3_READ_BYTES:sslv3警报错误证书(external / openssl / ssl / s3_pkt.c:1127 0x29eb40:0x00000003)

我在Andorid 2.3上进行了测试,效果很好。

我的服务器要求客户端validation 也许FROYO不支持这种握手……我不知道……

我也尝试过使用httpclient。 在每种情况下都失败……

private void process() throws Exception { char[] pass = "clientpass".toCharArray(); InputStream ksStream = getAssets().open("clientKeyStore.bks"); KeyStore keyStore = KeyStore.getInstance("BKS"); keyStore.load(ksStream, pass); KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); kmf.init(keyStore, pass); ksStream.close(); X509TrustManager[] tm = new X509TrustManager[] { new X509TrustManager() { public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } } }; SSLContext context = SSLContext.getInstance("TLS"); context.init(kmf.getKeyManagers(), tm, null); HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory()); HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() { public boolean verify(String hostname, SSLSession session) { return true; } }); URL url = new URL("https://192.168.2.101:8443/RestTomcat/resources/veiculos/KKK1234"); HttpsURLConnection httpsURLConnection = (HttpsURLConnection) url.openConnection(); BufferedReader br = new BufferedReader(new InputStreamReader(httpsURLConnection.getInputStream())); StringBuilder sb = new StringBuilder(); String line = null; while ((line = br.readLine()) != null) sb.append(line + "\n"); br.close(); Log.e("OUTPUT", sb.toString()); httpsURLConnection.disconnect(); } 

确保2.2设备上的日期,时间和时区设置正确。

我不确定你是否找到了答案,但这似乎是Android 2.2的一个错误,无需分析完整的证书链。 如果.p12证书有多个链,Android 2.2似乎不会跟随整个链。

我遇到了同样的问题,我在这个问题中提出了问题 。 我要求我们的管理员生成一个新的客户端证书,该证书由Root CA直接发布,而没有Sub CA,之后2.2将起作用。 它确实带来了没有Sub CA作为中介的客户端证书的安全性问题。

更新:Android团队确认这是2.1 / 2.2中的问题。 详细信息位于以下问题跟踪器中