[英]Android application: Managing an expired SSL certificate?
我的应用程序的数据源的SSL证书已过期,现在他们有了新的SSL证书。 这导致javax.net.ssl.SSLException: Not trusted server certificate
当我尝试执行https://
POST时,调试器中的javax.net.ssl.SSLException: Not trusted server certificate
错误。
如何在我的应用程序中修复此错误? 我是否需要重新部署到所有设备?
首先,您应该看一下新证书。 什么改变了? 例如
由于您丢失了私人应用程序签名密钥,因此您基本上处于困境。 (每个人都在阅读:始终备份您的密钥库并将其存储在至少一个安全的地方。否则无法回复。)
您是由第三方使用的DataSource吗? 如果您能够将证书更改为Android信任的证书,则可以恢复您的应用。 我在这里没有看到另一种解决方案。
但无论如何,你在哪里使用你的应用程序?
使用免费的应用程序,它不是太糟糕。 更改代码中的包名称并创建一个新应用程序。 发布它。 在旧应用程序的文本中使用提示,告知人们这个应用程序不再更新,他们应该获得您的新应用程序。
如果它是付费应用,您将很难找到迁移现有用户的方法。
很抱歉这样说,因为这是一个痛苦的情况,但这必须是你跳过的软件工程课。 您的签名是备份最重要的事情。 您可以随时重新设计代码,而您没有机会使用密钥。
由于上述事实是常识,我可以提供的唯一“官方来源”是关于保护您的私钥的重要性的文本。
假设证书有效,Android中存在一些可能导致此问题的SSL漏洞。
你在使用URLConnection还是HttpClient?
在什么版本的Android失败?
我遇到的两个错误:
添加您尝试连接的网址,人们可以查看该网址。
假设新证书有效且值得信赖,您不需要更改您的申请。 (除非您特别期望证书或在您的申请中对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应用程序中使用它。 一旦我有更多信息,我会在这里更新帖子。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.