我们应该将 google 的安全提供程序与 OkHttp 一起使用吗?

Should we use google's security provider with OkHttp?

我们将 okhttp in our Android project to talk to our API; all communications are encrypted with SSL/TLS, and our servers can speak SPDY. We're also linking in Google Play Services 用于融合位置提供程序和一些其他功能。

我们目前未使用的部分 Play 服务是它们的 security provider,它承诺升级设备的 SSL 堆栈以某种方式防止各种漏洞。但是,文档对于提供商实际 做什么 以及哪些 SSL 方法受其影响以及哪些不受其影响(提供了每个示例,但不是综合列表)。

所以,我想我的问题是双重的:

TL;DR: 是的。

Play 服务动态安全提供程序是 JCA Cryptographic Service Provider (CSP)。 Java 程序可以注册多个 CSP,每个 CSP 可以提供不同的安全原语实现,例如哈希算法。这是 Android 2.3 中包含的 CSP 列表:

  • AndroidOpenSSL 版本 1.0
  • DRLCertFactory 版本 1.0
  • BC 版本 1.45
  • 加密版本 1.0
  • HarmonyJSSE 1.0 版

当您 activate the Play Services Dynamic Security Provider 如 Android 开发人员文档中所述时,只会将另一个提供商添加到列表顶部:

  • GmsCore_OpenSSL 版本 1.0
  • AndroidOpenSSL 版本 1.0
  • DRLCertFactory 版本 1.0
  • BC 版本 1.45
  • 加密版本 1.0
  • HarmonyJSSE 1.0 版

当 OkHttp(或您的应用程序的任何其他部分)"does security" 使用 JCA 时,它会根据其功能和偏好(排序顺序)选择提供者,这意味着 GmsCore_OpenSSL 将被使用。

通过依赖 GmsCore_OpenSSL 而不是与您的应用 运行 设备捆绑的任何东西,您可以获得 the provided security primitives even on ancient devices with Android 2.3, i.e. no more SSLv3, TLS 1.2 (Android 2.3 doesn't even support TLS 1.1) 的最新实现和当前密码-套件和修补的安全漏洞。由于 Play 服务独立于 Android 进行更新,因此 Play 服务动态安全提供程序保持最新状态,因此在当前设备上使用它也很有意义。

如果您想要定位无法访问 Play 服务的设备或者您不喜欢使用 Play 服务,您可以包含 conscrypt in your application. OkHttp supports it since version 3.10。但是你必须定期更新你的应用程序。