我的应用程序的数据源的SSL证书已过期,现在他们有了新的SSL证书。当我尝试执行javax.net.ssl.SSLException: Not trusted server certificate
POST时,这会导致调试器出现https://
错误。
如何在我的应用程序中修复此错误?我是否需要重新部署到所有设备?
答案 0 :(得分:0)
首先,你应该看看新证书。什么改变了? e.g。
由于您丢失了私人应用程序签名密钥,因此您基本上处于困境。 (每个人都在阅读:始终备份您的密钥库并将其存储在至少一个安全的地方。否则无法回复。)
您使用的是第三方的DataSource吗?如果您能够将证书更改为Android信任的证书,则可以恢复您的应用。我在这里没有看到另一种解决方案。
但无论如何,你的应用程序在哪里?
使用免费的应用程序,它不是太糟糕。更改代码中的包名称并创建一个新应用程序。发布它。在旧应用程序的文本中使用提示,告知人们这个应用程序不再更新,他们应该获得您的新应用程序。
如果是付费应用,您将很难找到迁移现有用户的方法。
很抱歉这么说,因为这是一个痛苦的情况,但这必须是你跳过的软件工程课。您的签名是备份最重要的事情。您可以随时重新设计代码,而您没有机会使用密钥。
由于上述事实是常识,我能提供的唯一“官方来源”是关于securing your private key重要性的文本。
答案 1 :(得分:0)
假设证书有效,Android中存在一些可能导致此问题的SSL漏洞。
您使用的是URLConnection还是HttpClient?
在什么版本的Android上失败了?
我遇到过两个错误:
添加您尝试连接的网址,人们可以查看该网址。
答案 2 :(得分:0)
假设新证书有效且值得信赖,您不需要更改您的申请。 (除非您特别期望证书或在您的申请中对SSL做一些不寻常的事情。)
这是一个非常方便的工具,用于验证互联网主机的SSL证书: http://www.digicert.com/help/
或者,只需使用您的应用在桌面浏览器中使用的https网址来检查证书(假设它很糟糕,大多数浏览器都会很好地解释问题并提供证书的详细信息)。如果您的应用使用的是IP地址或特定的域名,请尝试使用该确切的域名。 (URL的其余部分无关紧要,只有https://host.example.com/
部分。)
也许旧证书更宽松(也许它包含了域内更广泛的主机?)
另一方面,如果问题是新证书包含通配符(即“* .example.com”),那么nmr指出的SSL错误(参见http://code.google.com/p/android/issues/detail?id=17680)可能是修复此问题涉及升级Android版本。或者充分攻击您的应用程序以接受此已知证书。或者,要求服务器管理员为您安装更好的SSL证书(假设您对“数据源”有任何影响)
答案 3 :(得分:0)
现在可以在线找到解决方案。我还没有找到一个可行的解决方案,但基本上你需要获得证书,用凭证创建一个密钥库,并在你的Android应用程序中使用它。获得更多信息后,我将在此处更新帖子。