【发布时间】:2021-03-24 18:09:05
【问题描述】:
我正在尝试使用 okhttp 在我的 android 应用程序上实现双向 ssl。目前,我已经通过输入流从原始文件夹中读取服务器证书并将其添加到密钥库,将服务器证书添加到信任库,从而实现了证书锁定。我不清楚的是如何添加客户端密钥对以使用相互 ssl 初始化 okhttp 客户端。我当前的代码是;
try {
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(null, null);
InputStream certInputStream = context.getResources().openRawResource(
context.getResources().getIdentifier("server",
"raw", context.getPackageName()));
BufferedInputStream bis = new BufferedInputStream(certInputStream);
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
while (bis.available() > 0) {
Certificate cert = certificateFactory.generateCertificate(bis);
keyStore.setCertificateEntry("s1ha", cert);
}
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(keyStore);
trustManagers = trustManagerFactory.getTrustManagers();
sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, trustManagers, new SecureRandom());
} catch (Exception e) {
e.printStackTrace();
}
我可以将带有客户端密钥对的密钥库复制到原始文件夹并打开该密钥库而不是默认类型并将其传递给信任管理器并构建 okhttp 客户端吗?
我是新手,对此我有点困惑。数周以来一直在寻找指南,但仍未找到明确解释该程序的指南。在这里找到的 Okhttp 自定义信任 okhttp 似乎很有希望,但我不确定它是否实现相互 SSL 任何帮助或示例代码将不胜感激。
【问题讨论】:
-
目前 OkHttp 中最接近的例子是github.com/square/okhttp/blob/…,但这更侧重于 JDK 和生成的本地证书。
标签: android ssl okhttp android-security