在 Android 上配置 OkHttp 以信任 "AndroidCAStore" 中的内容以及显式证书
Configure OkHttp on Android to trust both content in "AndroidCAStore" and also explicit certificates
我的设置:
- OkHttp 4.2.2
- Conscrypt-android 2.0.0
我正在尝试配置 OkHttp 以接受:
内置商业服务器证书(由 AndroidCAStore
中包含的 CA 签名)
- 内部 Conscrypt 将 return KeyStore.getInstance("AndroidCAStore")
非商业服务器证书(由我的应用程序中的捆绑 CA 证书签名)
我已经让这两个解决方案分开工作:
- 要解决 (1) 我只是用空密钥库初始化信任管理器工厂。
- 为了解决 (2),我使用带有捆绑 CA 的已初始化密钥库来初始化信任管理器工厂。
如何同时解决这两个问题? 即我如何获取 AndroidCAStore 的副本并将我的证书添加到其中并使用它来初始化信任管理器工厂?
这有效(省略了异常处理):
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);
}
我的设置:
- OkHttp 4.2.2
- Conscrypt-android 2.0.0
我正在尝试配置 OkHttp 以接受:
内置商业服务器证书(由
AndroidCAStore
中包含的 CA 签名)- 内部 Conscrypt 将 return KeyStore.getInstance("AndroidCAStore")
非商业服务器证书(由我的应用程序中的捆绑 CA 证书签名)
我已经让这两个解决方案分开工作:
- 要解决 (1) 我只是用空密钥库初始化信任管理器工厂。
- 为了解决 (2),我使用带有捆绑 CA 的已初始化密钥库来初始化信任管理器工厂。
如何同时解决这两个问题? 即我如何获取 AndroidCAStore 的副本并将我的证书添加到其中并使用它来初始化信任管理器工厂?
这有效(省略了异常处理):
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);
}