gpt4 book ai didi

android - 将自签名证书加载到 HttpsUrlConnection 会破坏默认的 CA 证书验证

转载 作者:太空宇宙 更新时间:2023-11-03 13:47:55 24 4
gpt4 key购买 nike

我正在尝试使用 HttpsUrlConnection 加载 BKS 并使用以下代码工作,但是它破坏了我其他服务器的默认 CA 证书验证。

try {
TrustManagerFactory tmf = TrustManagerFactory
.getInstance(TrustManagerFactory.getDefaultAlgorithm());
KeyStore ks = KeyStore.getInstance("BKS");
InputStream in = ctw.getResources()
.openRawResource(R.raw.bks);
ks.load(in, "password".toCharArray());
in.close();
tmf.init(ks);
TrustManager[] tm = tmf.getTrustManagers();

KeyManagerFactory kmf = KeyManagerFactory
.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(ks, "password".toCharArray());

SSLContext sc = SSLContext.getInstance("SSL");
sc.init(kmf.getKeyManagers(), tm, null);

HttpsURLConnection
.setDefaultHostnameVerifier(new HostnameVerifier() {

@Override
public boolean verify(String hostname,
SSLSession session) {
return true;
}
});

HttpsURLConnection
.setDefaultSSLSocketFactory(sc.getSocketFactory());
} catch (Exception e) {
e.printStackTrace();
}

我得到的错误是:

com.android.volley.NoConnectionError:
javax.net.ssl.SSLHandshakeException:
java.security.cert.CertPathValidatorException:
Trust anchor for certification path not found.

我正在使用 Volley 库进行网络请求。是我的代码有误还是我应该修改 Volley 库?

谢谢。

最佳答案

我所做的是创建一个 CompositeTrustManager,它可以检查多个来源,包括自签名证书和默认 CA。那隐藏在the TrustManagerBuilder API后面在 my CWAC-Security library .您将使用如下代码:

new TrustManagerBuilder(this)
.selfSigned(R.raw.bks, "password".toCharArray())
.or()
.useDefault();

然后调用 build() 获取处理您的自签名证书和默认 CA 的 TrustManager[]

就目前而言,您的代码替换库存 TrustManager[] 为与您的 BKS 商店相关的代码。

另一种方法是捕获失败并使用缺少自定义 TrustManager[] 的连接重试。

关于android - 将自签名证书加载到 HttpsUrlConnection 会破坏默认的 CA 证书验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24429485/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com