Настройте OkHttp на Android, чтобы доверять как контенту в «AndroidCAStore», так и явным сертификатам - PullRequest
0 голосов
/ 24 февраля 2020

Моя настройка:

  • OkHttp 4.2.2
  • Conscrypt- android 2.0.0

I ' я пытаюсь настроить OkHttp для приема:

  1. Встроенные сертификаты коммерческого сервера (подписанные центрами сертификации, включенными в AndroidCAStore)

    • Внутреннее Conscrypt затем вернется KeyStore.getInstance ("AndroidCAStore")
  2. Некоммерческие серверные сертификаты (подписанные сертификатом CA в моем приложении)

Я заставил оба решения работать отдельно:

  • Чтобы решить (1), я просто инициализирую фабрику диспетчера доверия с хранилищем нулевого ключа.
  • Для решения (2) Я инициализирую фабрику диспетчера доверия, используя инициализированное хранилище ключей с помощью поставляемого CA.

Как решить обе задачи одновременно? Т.е. как мне получить копию AndroidCAStore и добавить в нее свои сертификаты и использовать ее для инициализации фабрики диспетчера доверия?

1 Ответ

0 голосов
/ 26 февраля 2020

Это работает (обработка исключений опущена):

KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(null);

// Ommitted: Code to add certificates explictly from file

final KeyStore androidCAStore = KeyStore.getInstance("AndroidCAStore");
androidCAStore.load(null);
final Enumeration<String> androidCAStoreAliases = androidCAStore.aliases();
while (androidCAStoreAliases.hasMoreElements()) {
     final String param = androidCAStoreAliases.nextElement();
     keyStore.setEntry(param, androidCAStore.getEntry(param, null), null);
}
...