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

Android-使用改进版2.3和OkHTTP进行证书固定,android,retrofit2,okhttp3,certificate-pinning,Android,Retrofit2,Okhttp3,Certificate Pinning,各位开发者好, 我有以下问题: 几个月以来,我一直在使用OkHTTP 3.6和改进版1.9.0成功地使用证书固定 最近,我将旧的改装版本更新为2.3.0,并开始使用OkHttp 3.8。由于更新,证书固定不再适用于4.1和6.0之间的设备 我尝试使用不同的OkHTTP版本,但没有成功。此外,我试图通过gradle强制使用特定的OkHTTP版本,但这并没有改变任何事情 下面是我们用于固定的代码: public CertificatePinner provideCertificatePinner(@

各位开发者好,

我有以下问题:

几个月以来,我一直在使用OkHTTP 3.6和改进版1.9.0成功地使用证书固定

最近,我将旧的改装版本更新为2.3.0,并开始使用OkHttp 3.8。由于更新,证书固定不再适用于4.1和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();
并根据以下要求实施自定义SSLSocketFactory,强制在4.1版本下使用TLS v1.2:

编辑:

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

现在我完全不知道如何解决这个问题。 感谢您的帮助

干杯
Pascal

我发现问题不是由OKHTTP/改造引起的,而是由客户端的错误配置引起的。由于在那个项目中是相当新的,所以我并不完全了解它


抱歉打扰您,感谢您提供的任何帮助

请详细解释“证书固定不再工作”的含义。@Commonware抱歉,我忘记了,现在添加了它。谢谢创建一个可复制的测试项目,并向OkHttp人员提交一个问题,解释您如何进行MITM攻击(Charles等),我想。