栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

找不到用于验证路径的Android Volley自签名HTTPS信任锚

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

找不到用于验证路径的Android Volley自签名HTTPS信任锚

您可以尝试以下示例代码。希望这可以帮助!

private TrustManager[] getWrappedTrustManagers(TrustManager[] trustManagers) {    final X509TrustManager originalTrustManager = (X509TrustManager) trustManagers[0];    return new TrustManager[]{ new X509TrustManager() {     public X509Certificate[] getAcceptedIssuers() {         return originalTrustManager.getAcceptedIssuers();     }     public void checkClientTrusted(X509Certificate[] certs, String authType) {         try {  if (certs != null && certs.length > 0){      certs[0].checkValidity();  } else {      originalTrustManager.checkClientTrusted(certs, authType);  }         } catch (CertificateException e) {  Log.w("checkClientTrusted", e.toString());         }     }     public void checkServerTrusted(X509Certificate[] certs, String authType) {         try {  if (certs != null && certs.length > 0){      certs[0].checkValidity();  } else {      originalTrustManager.checkServerTrusted(certs, authType);  }         } catch (CertificateException e) {  Log.w("checkServerTrusted", e.toString());         }     } }    };}private SSLSocketFactory getSSLSocketFactory_Certificate(String keyStoreType, int keystoreResId)        throws CertificateException, KeyStoreException, IOException, NoSuchAlgorithmException, KeyManagementException {    CertificateFactory cf = CertificateFactory.getInstance("X.509");    InputStream caInput = getResources().openRawResource(keystoreResId);    Certificate ca = cf.generateCertificate(caInput);    caInput.close();    if (keyStoreType == null || keyStoreType.length() == 0) {        keyStoreType = KeyStore.getDefaultType();    }    KeyStore keyStore = KeyStore.getInstance(keyStoreType);    keyStore.load(null, null);    keyStore.setCertificateEntry("ca", ca);    String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();    TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);    tmf.init(keyStore);    TrustManager[] wrappedTrustManagers = getWrappedTrustManagers(tmf.getTrustManagers());    SSLContext sslContext = SSLContext.getInstance("TLS");    sslContext.init(null, wrappedTrustManagers, null);    return sslContext.getSocketFactory();}private SSLSocketFactory getSSLSocketFactory_KeyStore(String keyStoreType, int keystoreResId, String keyPassword) throws CertificateException, KeyStoreException, IOException, NoSuchAlgorithmException, KeyManagementException {        InputStream caInput = getResources().openRawResource(keystoreResId);        // creating a KeyStore containing trusted CAs        if (keyStoreType == null || keyStoreType.length() == 0) { keyStoreType = KeyStore.getDefaultType();        }        KeyStore keyStore = KeyStore.getInstance(keyStoreType);        keyStore.load(caInput, keyPassword.toCharArray());        // creating a TrustManager that trusts the CAs in the KeyStore        String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();        TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);        tmf.init(keyStore);        TrustManager[] wrappedTrustManagers = getWrappedTrustManagers(tmf.getTrustManagers());        SSLContext sslContext = SSLContext.getInstance("TLS");        sslContext.init(null, wrappedTrustManagers, null);        return sslContext.getSocketFactory();    }

然后调用两个之一:

SSLSocketFactory sslSocketFactory = getSSLSocketFactory_KeyStore("BKS", R.raw.androidbksv1, "123456789");SSLSocketFactory sslSocketFactory = getSSLSocketFactory_Certificate("BKS", R.raw.androidbksv1_cert);


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/401501.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号