我的问题:
有没有人在具有多个证书链的 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 不会检查完整的链。为了确保我使用以下命令检查了 KeyStore 中的链数getCertificateChain()
method.
我一直在寻找 Android 中与我的问题相关的错误,但没有找到任何错误。类似的问题已经在SO中发布但没有答案
- ssl 无法在 android-2-2-only-in-2-3 上工作 https://stackoverflow.com/questions/9300821/ssl-not-working-on-android-2-2-only-in-2-3
-
android-2-2-ssl-库错误 https://stackoverflow.com/questions/8396548/android-2-2-ssl-library-error。 Nikolay Elenkov 在唯一答案中的最后评论似乎表明了与我相同的结论,但我找不到任何支持它的文档