【问题标题】:Android application: Managing an expired SSL certificate?Android 应用程序:管理过期的 SSL 证书?
【发布时间】:2011-09-18 23:45:29
【问题描述】:

我的应用程序的数据源的 SSL 证书已过期,现在他们有了新的 SSL 证书。当我尝试执行https:// POST 时,这会导致调试器中出现javax.net.ssl.SSLException: Not trusted server certificate 错误。

如何在我的应用程序中修复此错误?我需要重新部署到所有设备吗?

【问题讨论】:

  • 我从 Android 调试器得到的错误是“javax.net.ssl.SSLException: Not trust server certificate.”

标签: java android ssl https


【解决方案1】:

首先您应该看一下新证书。究竟发生了什么变化?例如

  • 新证书是否使用相同的公用名 (CN)?
  • CN 是否与您查询的主机名匹配?
  • 它是否由不同的证书颁发机构 (CA) 签名?
  • 如果是,这个 CA 是否受 Android 信任?

由于您丢失了私有应用程序签名密钥,因此您基本上被卡住了。 (阅读此内容的每个人:始终备份您的密钥库并将其存储在至少一个安全的地方。否则就没有退路了。)

您正在使用的 DataSource 是否被第三方使用?如果您能够将证书更改为 Android 信任的证书,您的应用程序可能会恢复。我在这里没有看到其他解决方案。

但是,无论如何,您的应用程序要去哪里?

有了免费的应用程序,还不错。更改代码中的包名称并创建一个新应用程序。发布它。在您的旧应用程序的文本中使用提示,以告知人们此应用程序不再更新,他们应该获取您的新应用程序。

如果它是一款付费应用,您将很难找到迁移现有用户的方法。

很抱歉,因为这是一个痛苦的情况,但这一定是你跳过的软件工程课程。您的签名是最重要的备份。您可以随时重新设计您的代码,而您的密钥没有任何机会。

由于上述事实是常识,我唯一能提供的“官方来源”就是这篇关于securing your private key重要性的文字。

【讨论】:

    【解决方案2】:

    假设证书有效,Android 中有大量 SSL 错误可能导致此问题。

    你使用的是 URLConnection 还是 HttpClient?

    在哪个版本的 Android 上失败了?

    我遇到的两个错误:

    添加您尝试连接的 URL,人们可能会看到它。

    【讨论】:

    • 它在所有版本的 android 上都失败了,afiak。请在原帖中查看我的评论
    【解决方案3】:

    假设新证书有效且值得信赖,您不需要更改您的应用程序。 (除非您特别期待证书或在您的应用程序中针对 SSL 做了一些不寻常的事情。)

    这是一个非常方便的工具,用于验证 Internet 主机的 SSL 证书: http://www.digicert.com/help/

    或者,只需使用您的应用在桌面浏览器中使用的 https URL 来检查证书(假设它不好,大多数浏览器都能很好地解释问题并提供证书的详细信息)。如果您的应用使用 IP 地址或特定域名,请尝试使用该确切域名。 (URL 的其余部分无关紧要,只需 https://host.example.com/ 部分。)

    也许旧证书更宽松(也许它包含域内更广泛的主机集?)

    另一方面,如果问题是新证书包含通配符(即,它用于“*.example.com”,那么 nmr 指出的 SSL 错误(参见http://code.google.com/p/android/issues/detail?id=17680)可能是罪魁祸首. 解决这个问题需要升级 Android 版本。或者破解你的应用程序以接受这个已知的证书。或者,要求服务器管理器为你安装更好的 SSL 证书(假设你对你的“数据源”有任何影响)。

    【讨论】:

    • 请看我在原帖中的评论
    • 是的,您收到的错误表明 Android 不信任它从服务器获得的 SSL 证书。因此,我建议您现在查看服务器上的 SSL 证书的内容,看看我们是否可以诊断问题。 (具体来说,每个人都认为它是一个糟糕的证书,还是只是 Android?)
    • 我不确定原始证书是什么。这有什么不同吗?
    • 知道原始证书是什么会很方便,但这不是必需的。
    • 如何获取证书原件?和新的?
    【解决方案4】:

    现在可以在网上找到该解决方案。我还没有找到一个可行的解决方案,但基本上你需要获取证书,使用凭据创建一个密钥库,然后在你的 android 应用程序中使用它。一旦我有更多信息,我会在这里更新帖子。

    【讨论】:

    • 这不是一个正确的答案
    猜你喜欢
    • 2016-10-07
    • 1970-01-01
    • 2016-06-03
    • 2014-10-14
    • 2023-04-07
    • 2020-10-08
    • 2020-08-16
    • 1970-01-01
    相关资源
    最近更新 更多