繁体   English   中英

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

[英]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错误。

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

首先,您应该看一下新证书。 什么改变了? 例如

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

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

您是由第三方使用的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM