【问题标题】:OkHttp load signed certificateOkHttp 加载签名证书
【发布时间】:2018-11-29 02:59:36
【问题描述】:

出于测试目的,我需要模拟客户端 api 请求。我们的服务器现在使用 https,建议我使用 OkHttpClient 而不是我们原来的 BaseHttpClient 实现。我发现我需要将.sslSocketFactory(sslSocketFactory, x509TrustManager) 添加到我的客户端构建器中,并且我还找到了加载证书的有用代码:

private X509TrustManager trustManagerForCertificates(InputStream in)
{
    CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
    Collection<? extends Certificate> certificates = certificateFactory.generateCertificates(in);
    char[] password = "password".toCharArray(); // Any password will work.
    KeyStore keyStore = newEmptyKeyStore(password);
    int index = 0;
    for (Certificate certificate : certificates) {
      String certificateAlias = Integer.toString(index++);
      keyStore.setCertificateEntry(certificateAlias, certificate);
    }
    KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
    keyManagerFactory.init(keyStore, password);
    TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
    trustManagerFactory.init(keyStore);
    return (X509TrustManager) trustManagers[0];
}

我的问题是我的证书有一个密钥,我找不到将.crt 和.key 文件的内容成对提供的方法。如果我要卷曲它,我可以做到

curl --tlsv1.2 --insecure -v --key ./client.key --cert ./client.crt  https://myserver/api/request

有没有办法用 OkHttp 做类似的事情?还是我必须使用现有证书及其密钥生成新证书?

【问题讨论】:

    标签: java okhttp3


    【解决方案1】:

    最后,我使用this site 中的代码,使用BouncyCastle 的库,设法让它工作。

    为了让它工作,我还需要ca.crt(它包含在示例中——由于--insecure 开关,curl 命令可以不用这个)。我浏览的很多网站都让我认为我需要使用ca 和client 证书创建证书链,但正如您从链接代码中看到的那样,解决方案是拥有两个密钥库:一个对于 CA,用于TrustManager,一个用于客户端证书,用于KeyManager。然后可以用这两个初始化SSLContext。

    我遇到的最后一个障碍是一个例外:

    java.lang.ClassNotFoundException: org.bouncycastle.jcajce.JcaJceHelper

    这是由于从各种来源导入了不止一个版本的 bouncycastle。确保我使用了正确版本的 bcprov 和 bcpkix 解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2021-04-27
      • 2016-09-28
      • 1970-01-01
      • 2017-08-15
      • 2014-08-17
      • 2016-01-09
      • 2023-04-02
      • 2019-11-04
      • 2013-04-01
      相关资源
      最近更新 更多