【问题标题】:Prompting user to accept self-signed SSL using DefaultHttpClient in Android在 Android 中使用 DefaultHttpClient 提示用户接受自签名 SSL
【发布时间】:2013-11-14 08:52:04
【问题描述】:

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

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

理想情况下,我想提示用户通知他们 SSL 证书无法验证,如果他们接受,我想下载提供的证书,将其存储并用于下一次连接。或者类似这个过程的东西(比如 Firefox 的 SSL 例外列表)

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

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

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

谢谢, 汤姆

【问题讨论】:

    标签: android http ssl


    【解决方案1】:

    在 android ICS 中有 KeyChain class,您可以在其中存储其他受信任的证书。

    你的软件可以做这样的事情:

    1. 创建专用的X509TrustManager 以处理未知的服务器证书(参见X509TrustManager.checkServerTrusted 方法)
    2. 当服务器证书未知时,创建一个 Intent 提示用户使用KeyChain.createInstallIntent() 安装证书

    证书应该可用于未来的连接。

    【讨论】:

    • 谢谢。你的方法与我刚刚找到的一篇博文一致 - nelenkov.blogspot.co.uk/2011/12/…。我现在正在尝试。
    • 我使用 setKeyEntry() 将不受信任链中的证书直接添加到 KeyStore。现在这是一种享受!谢谢。
    猜你喜欢
    • 2010-11-16
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    • 2011-08-25
    • 2016-07-24
    相关资源
    最近更新 更多