Android 应用:如何管理过期的 SSL 证书?

5

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

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


我从Android调试器中得到的错误是“javax.net.ssl.SSLException:不受信任的服务器证书。” - emdog4
4个回答

0

首先,您应该查看新证书。到底有什么变化?例如:

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

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

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

但无论如何,您的应用程序要走向何方?

对于免费应用程序而言,情况并不太糟糕。在代码中更改包名称并创建一个新应用程序。发布它。在旧应用程序的文本中使用提示,告知人们此应用程序不再更新,他们应该获取您的新应用程序。

如果这是一款付费应用程序,您将面临难以迁移现有用户的困境。

很抱歉这么说,因为这是一个痛苦的情况,但这一定是你跳过的软件工程课程。你的签名是最重要的备份内容。你可以重新设计你的代码,但如果你失去了你的密钥,就没有任何机会了。

由于上述事实是常识,我唯一能提供的“官方来源”是关于保护你的私钥重要性的这篇文章。


0

Android中存在大量SSL错误,这可能是导致此问题的原因,假设证书有效。

您正在使用URLConnection还是HttpClient?

在哪个版本的Android上出现了故障?

我遇到的两个错误:

添加您要连接的URL,人们可能会查看它。


它在所有安卓版本上都失败了,据我所知。请查看我在原帖中的评论。 - emdog4

0

假设新证书是有效和可信的,您不需要更改应用程序。(除非您特别期望证书或在应用程序中对SSL进行了一些不寻常的操作。)

这是一个非常方便的工具,用于验证互联网主机的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证书(假设您对“数据源”有任何影响力)。


请查看我在原帖中的评论。 - emdog4
是的,你收到的错误提示表明Android不信任从服务器获取的SSL证书。因此,我建议你查看服务器上的SSL证书以了解我们是否可以诊断问题。(具体来说,每个人都认为它是一个坏证书,还是只有Android认为是这样?) - P.T.
我不确定原始证书是什么。这会有影响吗? - emdog4
知道原始证书会很方便,但并非必需。 - P.T.
我该如何获得原始证书?以及新的证书呢? - emdog4
你需要向服务器所有者请求提供原始证书。新证书可以在任何Web浏览器或使用“openssl”查看。请参阅:http://www.madboa.com/geek/openssl/#cert-retrieve - P.T.

0

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


4
这不是一个恰当的答案。 - Leo supports Monica Cellio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接