Должны ли мы использовать поставщика безопасности Google с помощью OkHttp?

Мы используем okhttp в нашем Android-проекте, чтобы поговорить с нашим API; все коммуникации шифруются с помощью SSL/TLS, и наши серверы могут говорить SPDY. Мы также связываем Службы Google Play для поставщика плавного доступа и некоторые другие функции.

Часть Служб Службы, которые мы в настоящее время не используем, это их поставщик безопасности, который promises обновляет стек SSL устройства, чтобы каким-то образом защитить от различных уязвимостей. Тем не менее, документы несколько расплывчаты относительно того, что на самом деле делает провайдер, и о том, какие именно методы SSL влияют на него, а какие нет (приводится несколько примеров каждого из них, но не полный список).

Итак, я думаю, мой вопрос двоякий:

  • Будет ли динамический поставщик безопасности работать с okhttp, или okhttp полагается на API более низкого уровня (или более высокого уровня), на которые не влияет установка поставщика?

  • Предполагая, что это действительно работает, каковы преимущества? Есть ли преимущества в плане безопасности, о которых стоит заботиться? Будет ли это на самом деле исправить родной сбой ALPN в okhttp 2.2, так как nfuller подсказывает, что он может?

Ответ 1

TL; DR: Да.

Динамический поставщик безопасности сервисов - JCA Поставщик криптографических услуг (CSP). Программа Java может иметь несколько зарегистрированных CSP, и каждый CSP может предоставлять различные реализации примитивов безопасности, таких как алгоритмы хеширования. Здесь список CSP включен в Android 2.3:

  • AndroidOpenSSL версия 1.0
  • DRLCertFactory версия 1.0
  • BC версия 1.45
  • Crypto версия 1.0
  • HarmonyJSSE версия 1.0

Когда вы активируете Dynamic Security Provider для Play Services, как указано в документации для разработчиков Android, в верхнюю часть списка добавляется только один провайдер

  • 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) с текущим шифровальные пакеты и исправленные дыры в безопасности. Поскольку Службы воспроизведения обновляются независимо от Android, поставщик динамических услуг Play Services остается актуальным и, следовательно, имеет смысл использовать его и на текущих устройствах.