Android DefaultHttpClient 接受 SSL 会话帮助的所有证书

Posted

技术标签:

【中文标题】Android DefaultHttpClient 接受 SSL 会话帮助的所有证书【英文标题】:Android DefaultHttpClient accept all certificates for SSL session help 【发布时间】:2010-10-06 05:24:15 【问题描述】:

我正在尝试使用 android 设备上的 apache DefaultHttpClient 连接到本地 HTTPS 服务器。

 DefaultHttpClient httpclient = new DefaultHttpClient();
 HttpPost httppost = new HttpPost("http://192.168.1.121:4113/services");
 ... header and content filling in ...
 HttpResponse response = httpclient.execute(httppost);

.execute 运行时,我收到“javax.net.ssl SSLException:不受信任的服务器证书”错误。我只想允许任何证书工作,无论它是否在 android 密钥链中。

我花了大约 40 个小时研究并试图找出解决此问题的方法。我已经看到了很多如何做到这一点的例子,但到目前为止还没有一个在 Android 中起作用;它们似乎只适用于 JAVA。有谁知道如何配置或覆盖 Android 中 Apache HttpClient 使用的证书验证,以便它只批准 DefaultHttpClient 连接的所有证书?

感谢您的热情回复

【问题讨论】:

HTTPS GET (SSL) with Android and self-signed server certificate的可能重复 【参考方案1】:

如果有人仍在尝试解决这个问题,我最终会选择这里的解决方案:

HTTPS GET (SSL) with Android and self-signed server certificate

向下滚动到 SimonJ 的解决方案。这是解决这个问题的一个简单直接的解决方案。

【讨论】:

【参考方案2】:

看这个教程http://blog.antoine.li/index.php/2010/10/android-trusting-ssl-certificates/

本教程基于 Apache 的 HttpClient,并解释了如何使用 SSLSocketFactory 来信任您自己的密钥库中定义的证书(还解释了如何使用 BouncyCastle 提供程序创建它)。

我已经测试过了,效果很好。在我看来,这是安全的方式。

【讨论】:

感谢您的尝试,但这不是我想做的。我不想将证书添加到我的密钥库中。我完全意识到我正在做的事情的安全隐患。这是针对商业产品的,我不能指望客户知道如何执行这些操作。我找到了几个通过将证书添加到密钥库来解决此问题的示例,但没有人能够完全绕过它。 我明白了。切换到普通的旧 java.net 库对您来说不是一种选择吗?有了这些,您可以轻松接受所有证书。也许这有帮助:***.com/questions/2703161/…没试过。 忘了说:mobile.synyx.de/2010/06/… 这家伙正在实现一个自己的 SSLSocketFactory,它应该接受所有自签名证书。

以上是关于Android DefaultHttpClient 接受 SSL 会话帮助的所有证书的主要内容,如果未能解决你的问题,请参考以下文章

Android:使用 DefaultHttpClient 登录网站并保留会话/cookie

Android Wigets 不能使用自定义 DefaultHttpClient

Android DefaultHttpClient 接受 SSL 会话帮助的所有证书

DefaultHttpClient 到 AndroidHttpClient

android 怎么使用httpurlconnection

DefaultHttpClient使用