你好,親愛的開發商,鋼釘的Android - 證書與改造2.3和OkHTTP
我有以下問題:使用證書鋼釘成功,因爲現在幾個月
I'm,與OkHTTP 3.6和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 1.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根據以下條件強制在AN 4.1版本中使用TLS v1.2::https://github.com/square/okhttp/issues/2372
編輯:
澄清。 PING不工作意味着我可以攔截我的應用程序和後端服務器之間的連接=>'中間人'。
現在我完全失去了如何解決這個問題。 任何幫助表示讚賞。
乾杯 帕斯卡
請詳細解釋一下「證書鎖定不再有效」的含義。 – CommonsWare
@CommonsWare對不起,我忘了,現在就添加它。謝謝! –
我想,創建一個可重複的測試項目並向OkHttp人員提出問題,解釋你如何進行MITM攻擊(查爾斯等)。 – CommonsWare