我对volley和SSL以及一些旧的Android设备有意见。
问题是,我们使用的公开信任的根证书在这些旧设备中不存在,并且操作系统不再更新,所以我想我应该将CA作为一个文件添加。我找到了许多关于如何信任单个证书的示例,但我也希望继续信任现有的根证书。我只想在我们的应用程序使用的信任存储中添加一些。
这个是可能的吗?有没有这样的代码示例?
编辑:我已经检查了以下链接,所有处理自签名或完全自定义的CA存储或简单地禁用我不想做的检查。我想保留默认CA存储,但添加一个或两个附加CA
How to import self-signed SSL certificate to Volley on Android 4.1+
Kind问候Jens
发布于 2021-03-30 16:43:42
您可以做的是将证书包含在您的应用程序中,并以编程方式加载它,并将其提供给您的volley客户端。
你分享的链接给了我一个想法,它应该是可能的,但是我从来没有使用过volley,也不能确认它是否真的会工作。所以我会做一次尝试,希望你能测试一下,并在这里分享你的结果。
KeyStore baseTrustStore = KeyStore.getInstance(KeyStore.getDefaultType());
baseTrustStore.load(null, null);
// get your custom certificate(s) from your android device our within your app
// and load it as a certificate object
Certificate myTrustedCertificate = // your additional trusted certificate
baseTrustStore.setCertificateEntry("my-trusted-certificate", myTrustedCertificate);
int counter = 0;
KeyStore systemTrustStore = KeyStore.getInstance("AndroidCAStore");
Enumeration<String> aliases = systemTrustStore.aliases();
while (aliases.hasMoreElements()) {
String alias = aliases.nextElement();
if (systemTrustStore.isCertificateEntry(alias)) {
Certificate certificate = systemTrustStore.getCertificate(alias);
baseTrustStore.setCertificateEntry("" + counter++, certificate);
}
}
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(baseTrustStore);
TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, trustManagers, null);
SSLSocketFactory socketFactory = sslContext.getSocketFactory();
HurlStack hurlStack = new HurlStack(null, socketFactory);
RequestQueue queue = Volley.newRequestQueue(this, hurlStack);因此,我首先创建一个空的信任存储区,我将在其中添加我想要信任的所有证书。首先,添加您在某处拥有的自定义根证书,并将其映射到java.security.cert.Certificate的一个实例。接下来,获取android CA存储并提取所有受信任的证书。之后,将所有这些证书添加到您的基本信任存储区,您可以使用它们来创建TrustManagerFactory、SSLContext和SSLSocketFactory。示例中的计数器只是生成某些别名的一种方式,但您可以指定或生成自己的别名。
https://stackoverflow.com/questions/66852393
复制相似问题