带有中间证书的 Android SSL 信任链 (Apache HttpClient 4.X)

opa*_*tut 5 java ssl android certificate apache-httpclient-4.x

我正在尝试使用 Apache 的 HttpClient 4.X 从 Android 应用程序查询 HTTPS 网站。我得到一个javax.net.ssl.SSLPeerUnverifiedException: No peer certificate例外。我按照不同的说明导入证书:

这些都不适合我。

我认为我的问题是该站点的证书链如下:

  • 电信根 CA 2
    • 中级A
      • 中级B
        • 站点证书

所述电信根CA 2被包括在Android默认密钥库(/system/etc/security/cacerts.bks)。我在自己用于测试的手机上检查了这一点。

现在的问题是,我必须在自定义密钥库中包含所有说明告诉我提供哪些证书?只是中间件?只有网站吗?两个都?我也需要根证书吗?不Site's certificate应该由链验证 - 我不需要提供任何额外的证书,因为链的根是可信的。

如果您能向我解释发生了什么以及我如何使其发挥作用,我会很高兴。请不要发布忽略证书的解决方法,因为这是用于生产并且必须是安全的。

Gre*_*eek 3

我不久前写了一篇博文,其中包括一个完整的工作示例,讲述了如何做到这一点。请参阅http://chariotsolutions.com/blog/post/https-with-client-certificates-on/

代码来自 GitHub 上的博客文章