Android 自签名证书的风险

信息安全 证书 证书固定
2021-08-31 00:15:42

在 OWASP 十大移动设备列表 中,提到永远不允许使用自签名证书。

我想和其他人一起检查为什么会这样?如果我的移动应用程序有一个服务器后端,并且我自己签署了一个密钥对(假设我自己是一个 CA)。如果我使用 pinning,我将使用我自己的 CA 的公钥来检查证书,然后使用服务器的公钥(这部分对我来说似乎很安全——假设攻击者不知道私钥)。

但是,如果我不使用固定,那么存在风险,因为现在 Android 中的默认 CA 不能用于验证证书,我必须使用信任所有证书才能使其工作?

总结:我问的是使用自签名证书而不固定 Android 应用程序的情况。

2个回答

听起来您使用自签名证书是安全的。但是您的使用模式的任何变化都会带来风险。例如,如果您通过 Web 浏览器或其他工具连接到您的服务器,您将无法自动验证证书。您仍然可以手动执行此操作,但它不会是自动的,并且有点容易出错。

我怀疑 T10 专注于一般情况,并没有费心说“除非您将证书固定到您的应用程序并且仅通过应用程序访问服务器或始终手动验证证书。”

如果您关心,您可以从StartSSL.com获取免费的 SSL 证书,然后完全绕过问题(尽管证书固定即使使用签名证书也会增加安全性)。

您不必信任所有证书即可使其正常工作。

  • HttpClient:
    使用 HTTP 客户端,您可以将自定义信任库(包含您的私有 PKI CA 链)和 Android 默认信任库加载SSLSocketFactory 中它工作得很好。
  • Webview:
    默认信任库已被信任,但如果不匹配,您必须为自定义信任库编写验证例程。
  • Web 浏览器(不是应用程序的一部分):
    默认 CA 是受信任的。您可以尝试通过 android 安全设置手动安装您的私有 CA,但它并不总是有效。