【问题标题】:Loading self signed cert to HttpsUrlConnection breaks default CA cert validation将自签名证书加载到 HttpsUrlConnection 会破坏默认 CA 证书验证
【发布时间】:2014-08-17 05:53:01
【问题描述】:

我正在尝试使用 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 库?

谢谢。

【问题讨论】:

    标签: android ssl android-volley httpsurlconnection


    【解决方案1】:

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

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

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

    就目前而言,您的代码替换股票 TrustManager[] 与您的 BKS 商店绑定。

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

    【讨论】:

      猜你喜欢
      • 2020-12-22
      • 2021-01-09
      • 2012-07-20
      • 1970-01-01
      • 2020-07-30
      • 1970-01-01
      • 1970-01-01
      • 2020-10-27
      • 1970-01-01
      相关资源
      最近更新 更多