我们应该使用OkHttp与谷歌的安全提供者吗?

15

我们在Android项目中使用okhttp来与API通信;所有通信都使用SSL / TLS加密,并且我们的服务器可以使用SPDY。我们还链接了Google Play服务的融合位置提供程序和其他一些功能。

我们目前没有使用的Play服务部分是它们的安全提供程序,该提供程序承诺将设备的SSL堆栈升级以保护免受各种漏洞的影响。但是,文档对于提供程序实际上做了什么,以及哪些SSL方法受其影响,哪些不受其影响有些模糊(提供了一些示例,但不是详尽列表)。

所以,我想问两个问题:

  • 动态安全提供程序是否适用于okhttp,或者okhttp依赖于未受提供程序安装影响的更低级别(或更高级别)的API?

  • 假设它确实有效,它有什么好处? 是否有值得关注的安全性好处? 它是否能够修复okhttp 2.2中与ALPN相关的本机崩溃问题,就像nfuller暗示的那样


你找到解决方案了吗? - rekire
@rekire,不,我们从来没有弄清楚到底发生了什么,所以现在一直把这个留在一边... - mlc
1个回答

11

简而言之:是的。

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

  • AndroidOpenSSL 版本 1.0
  • DRLCertFactory 版本 1.0
  • BC 版本 1.45
  • Crypto 版本 1.0
  • HarmonyJSSE 版本 1.0

当您按照 Android 开发者文档中所述激活 Play Services 动态安全提供程序时,只需将另一个提供程序添加到列表顶部即可。

  • GmsCore_OpenSSL 版本 1.0
  • AndroidOpenSSL 版本 1.0
  • DRLCertFactory 版本 1.0
  • BC 版本 1.45
  • Crypto 版本 1.0
  • HarmonyJSSE 版本 1.0

当 OkHttp(或应用程序的任何其他部分)使用JCA进行安全性操作时,它会根据其能力和首选项(排序顺序)选择提供程序,这意味着将使用GmsCore_OpenSSL。

通过依赖于GmsCore_OpenSSL而不是设备捆绑的任何内容,您可以在运行Android 2.3的古老设备上获得最新的提供的安全原语实现,即没有SSLv3,TLS 1.2(Android 2.3甚至不支持TLS 1.1),并具有当前的密码套件和修补安全漏洞。由于Play服务独立于Android更新,因此Play服务动态安全提供程序保持最新,因此在当前设备上使用它是有意义的。

如果你想针对没有Play服务访问权限的设备,或者不想使用Play服务,你可以在应用程序中包含conscryptOkHttp从3.10版本开始支持它。但是你必须定期更新你的应用程序。

官方页面:https://developer.android.com/training/articles/security-gms-provider注意:更新设备的安全提供程序不会更新android.net.SSLCertificateSocketFactory。我们鼓励应用程序开发人员使用高级方法与加密进行交互,而不是使用此类。大多数应用程序可以使用像HttpsURLConnection这样的API,而无需设置自定义TrustManager或创建SSLCertificateSocketFactory。鉴于此警告,如何使用具有自定义TrustManager的Google Play服务安全提供程序:例如证书固定,不受信任的CA? - garnet
@garnet 我认为如果您将其作为单独的问题发布,您会得到更有帮助的答案。 - aha
@aha,你能检查一下这个吗?https://stackoverflow.com/questions/73695027/google-suggested-security-providerinstaller-downgrade-tls-to-1-2 - Alessandro Scarozza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接