我的应用程序的数据源SSL证书已过期,他们现在有了一个新的SSL证书。当我尝试执行https://
POST时,在调试器中会出现javax.net.ssl.SSLException: Not trusted server certificate
错误。
我该如何在我的应用程序中修复此错误?我需要重新部署到所有设备吗?
首先,您应该查看新证书。到底有什么变化?例如:
由于您已经丢失了私有应用程序签名密钥,因此您基本上被卡住了。(阅读此内容的所有人:始终备份您的密钥库并将其存储在至少一个安全的地方。否则就没有回头路了。)
您正在使用的DataSource是否来自第三方?如果您能够更改为Android信任的证书,则可以恢复您的应用程序。我在这里看不到其他解决方案。
但无论如何,您的应用程序要走向何方?
对于免费应用程序而言,情况并不太糟糕。在代码中更改包名称并创建一个新应用程序。发布它。在旧应用程序的文本中使用提示,告知人们此应用程序不再更新,他们应该获取您的新应用程序。
如果这是一款付费应用程序,您将面临难以迁移现有用户的困境。
很抱歉这么说,因为这是一个痛苦的情况,但这一定是你跳过的软件工程课程。你的签名是最重要的备份内容。你可以重新设计你的代码,但如果你失去了你的密钥,就没有任何机会了。
由于上述事实是常识,我唯一能提供的“官方来源”是关于保护你的私钥重要性的这篇文章。
Android中存在大量SSL错误,这可能是导致此问题的原因,假设证书有效。
您正在使用URLConnection还是HttpClient?
在哪个版本的Android上出现了故障?
我遇到的两个错误:
添加您要连接的URL,人们可能会查看它。
假设新证书是有效和可信的,您不需要更改应用程序。(除非您特别期望证书或在应用程序中对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证书(假设您对“数据源”有任何影响力)。
现在可以在线找到解决方案。我还没有找到可行的解决方案,但基本上您需要获取证书,使用凭据创建密钥库,并在Android应用程序中使用它。一旦我有更多信息,我会在这里更新帖子。