使用Android中的DefaultHttpClient提示用户接受自签名SSL

时间:2013-11-14 08:52:04

标签: android http ssl

我正在开发一个连接到Microsoft Exchange的Android 4.0应用程序。

目前,我在处理自签名证书方面遇到困难,因为他们只是被拒绝了。我在SO上尝试了很多解决方案,构建了新的SocketFactories和TrustManagers,但它们都没有提供真正的解决方案。

理想情况下,我想提示用户告知他们无法验证SSL证书,如果他们接受了,我想下载所提供的证书,存储它并将其用于下一次连接。或类似于此过程的内容(如Firefox的SSL例外列表)

不幸的是,我发现的唯一示例依赖于使用命令行工具将证书安装到设备上的TrustStore中。当客户下载它时,这没有帮助。我只想要一个简单的接受/拒绝对话框。

我可以盲目地信任所有SSL证书,但我宁愿做一些更安全的事情。

有人能指出我正确的方向吗?我甚至想做什么?如果无法接受/拒绝,那么盲目接受自签名证书是我能够做到的最好的。

谢谢, 汤姆

1 个答案:

答案 0 :(得分:1)

来自android ICS的KeyChain class可以存储其他可信证书。

您的软件可以执行类似的操作:

  1. 创建专用的X509TrustManager以处理未知的服务器证书(请参阅X509TrustManager.checkServerTrusted方法)
  2. 当服务器证书未知时,创建一个Intent以提示用户使用KeyChain.createInstallIntent()安装证书
  3. 证书应该可用于将来的连接。