在代码中使用以下代码以避免这个问题:
// Create a TrustManager that trusts the CAs in our KeyStore
String keyStoreType = KeyStore.getDefaultType();
KeyStore keyStore = KeyStore.getInstance(keyStoreType);
//reset CAlist
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init((KeyStore) null);
TrustManager[] trustManagers = tmf.getTrustManagers();
final X509TrustManager origTrustmanager = (X509TrustManager) trustManagers[0];
TrustManager[] wrappedTrustManagers = new TrustManager[]{
new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return origTrustmanager.getAcceptedIssuers();
}
public void checkClientTrusted(X509Certificate[] certs, String authType) throws CertificateException {
try {
origTrustmanager.checkClientTrusted(certs, authType);
} catch (CertificateException e) {
e.printStackTrace();
}
}
public void checkServerTrusted(X509Certificate[] certs, String authType) throws CertificateException {
boolean found = false;
for (X509Certificate cert : certs) {
if (cert.getIssuerDN().getName().contains("Let's Encrypt")) {
found = true;
break;
}
}
if (!found) {
origTrustmanager.checkServerTrusted(certs, authType);
return;
}
try {
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
KeyStore ks = null;
ks = KeyStore.getInstance("AndroidCAStore");
ks.load(null, null);
tmf.init(ks);
TrustManager[] tms = tmf.getTrustManagers();
for (int i = 0; i < tms.length; i++) {
if (tms[i] instanceof X509TrustManager) {
((X509TrustManager) tms[i]).checkServerTrusted(certs, authType);
return;
}
}
} catch (NoSuchAlgorithmException e) {
throw new CertificateException(e);
} catch (KeyStoreException e