【问题标题】:Android 2.2 SSL Bug with client certificate?带有客户端证书的 Android 2.2 SSL 错误?
【发布时间】:2012-03-21 06:37:29
【问题描述】:

我的问题:

有没有人在 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 中,同样的方法会抛出“bad certificate error”

错误:14094412:SSL 例程:SSL3_READ_BYTES:sslv3 警报错误证书(外部/openssl/ssl/s3_pkt.c:1139 0x26bd38:0x00000003) 在 org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.nativeconnect(本机方法) 在 org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:316) 在 org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLOutputStream.(OpenSSLSocketImpl.java:564) 在 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 ssl client-certificates


    【解决方案1】:

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

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

    【讨论】:

    • 在我的情况下,我有一个自签名证书......所以我迷路了吗?
    猜你喜欢
    • 1970-01-01
    • 2022-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多