带有客户端证书的 Android 2.2 SSL Bug?

标签 android ssl client-certificates

我的问题:

有没有人在具有多个证书链的 Android 2.1/2.2 中通过客户端证书成功验证 SSL 连接?

详情:

我正在尝试为 Android 平台实现客户端证书身份验证。 StackOverflow 中已经有很多关于如何使用 KeyStore 进行的讨论,我遵循标准方法将它们提供给 SSLContext。

context.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(),null);

我的客户端证书附加了 3 个证书,形成了一个证书链。在 Android 2.3+ 中,SSL 握手成功执行,我可以继续处理请求。

然而在 Android 2.2 中,同样的方法会抛出“错误的证书错误”

error:14094412:SSL routines:SSL3_READ_BYTES:sslv3 alert bad certificate (external/openssl/ssl/s3_pkt.c:1139 0x26bd38:0x00000003)
at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.nativeconnect(Native Method)
at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:316)
at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLOutputStream.(OpenSSLSocketImpl.java:564)
at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.getOutputStream(OpenSSLSocketImpl.java:479)

如果我在 CAfile 参数中使用不完整的证书链发出 OpenSSL 命令,则会出现相同的错误:

openssl s_client -showcerts -cert [certificateFile] -key [keyFile] -connect [ip:port] -CAfile [cert-chain]

这让我相信 Android 2.1/2.2 不会检查完整链。为了确保我使用 getCertificateChain() 方法检查了 KeyStore 中的链数。

我一直在寻找与我的问题相关的 Android 错误,但没有找到任何错误。类似的问题已经在SO里发过没有回答

最佳答案

这似乎确实是 Android 2.1/2.2 的错误。

我所做的是要求我们的管理员创建另一个由根 CA 直接颁发的客户端证书。获得该证书后,我将其作为资源放入代码中,除了让 KeyStore 指向新证书外,它无需任何修改即可工作。

关于带有客户端证书的 Android 2.2 SSL Bug?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9538714/

相关文章:

java - Android应用程序通过套接字与服务器通信

android - 删除 RadioButton 图标 Android

image - 无法通过 HTTPS 访问 Amazon S3 dzi 图像文件

android - Xamarin AndroidClientHandler 发送客户端证书

ssl - 在 SSL 模式下使用 jndi 连接 LDAP,如何在 java 代码中编写客户端证书?

安卓矩形背景渐变

android - 在 ViewPager 中使用 Otto 时数据混合

ssl - 证书管理器 - 集群颁发者错误 - tls : handshake failure

php - SSL 工具不适用于 MySQL Workbench

java - 确保已颁发的证书不会自行颁发证书