我正在尝试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
库?
谢谢。