Android - 使用Retrofit 2.3和OkHTTP进行证书固定

时间:2017-08-11 11:55:03

标签: android retrofit2 okhttp3 certificate-pinning

亲爱的开发人员,您好

我有以下问题:

我几个月后成功使用证书锁定,使用OkHTTP 3.6和Retrofit 1.9.0。

最近我将使用过的Retrofit版本更新为2.3.0,并开始使用OkHttp 3.8。由于更新,证书固定不再适用于AN 4.1和AN 6.0之间的设备。

我尝试使用不同的OkHTTP版本,但没有运气。此外,我试图通过gradle强制使用特定的OkHTTP版本,但这并没有改变任何东西。

这里是我们用于钉扎的代码:

public CertificatePinner provideCertificatePinner(@PinForDomain(DEUTSCHE_POST) final PinnedDomain deutschePost, @PinForDomain(NOVOMIND) final PinnedDomain novomindPin, @PinForDomain(EMMI) final PinnedDomain emmiPin) {
    Log.d(LOG_TAG, "Creating CertificatePinner");
    final CertificatePinner.Builder builder = new CertificatePinner.Builder();
    builder.add("www.url.com", "sha256Key");
    return builder.build();
}

public OkHttpClient provideOkHttpClient(CertificatePinner pinner) {

    Log.d(LOG_TAG, "Creating OkHttpClient");
    final OkHttpClient.Builder clientBuilder = new OkHttpClient().newBuilder();
    clientBuilder.certificatePinner(provideCertificatePinner);
    clientBuilder.connectTimeout(BuildConfig.CONNECTION_TIMEOUT, TimeUnit.MILLISECONDS);
    clientBuilder.writeTimeout(BuildConfig.WRITE_TIMEOUT, TimeUnit.MILLISECONDS);
    clientBuilder.readTimeout(BuildConfig.CONNECTION_TIMEOUT, TimeUnit.MILLISECONDS);
    return clientBuilder.build();
}

所以我尝试了以下事项:

强制使用TLS v1.2

ConnectionSpec spec = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)  
.tlsVersions(TlsVersion.TLS_1_2)
.cipherSuites(
      CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
      CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
      CipherSuite.TLS_DHE_RSA_WITH_AES_128_GCM_SHA256)
.build();

OkHttpClient client = new OkHttpClient.Builder() 
    .connectionSpecs(Collections.singletonList(spec))
    .build();

根据:: https://github.com/square/okhttp/issues/2372

实现自定义SSLSocketFactory强制在AN 4.1下的版本中使用TLS v1.2

修改

澄清。 Pining不工作意味着我能够拦截我的应用程序和后端服务器之间的连接=> “中间人”。

现在我完全迷失了如何解决这个问题。 任何帮助表示赞赏。

干杯 帕斯卡

1 个答案:

答案 0 :(得分:0)

我发现问题不是由OKHTTP / Retrofit引起的,而是由客户端的错误配置引起的。在该项目中相当新,我不知道所有这些。

很抱歉打扰了你,感谢你给予的任何帮助