Android应用程序:管理过期的SSL证书?

时间:2011-09-18 23:45:29

标签: java android ssl https

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

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

4 个答案:

答案 0 :(得分:0)

首先,你应该看看新证书。什么改变了? e.g。

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

由于您丢失了私人应用程序签名密钥,因此您基本上处于困境。 (每个人都在阅读:始终备份您的密钥库并将其存储在至少一个安全的地方。否则无法回复。)

您使用的是第三方的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应用程序中使用它。获得更多信息后,我将在此处更新帖子。