看起來服務器使用TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
密碼。它只在API 20(L Preview)中開始支持。您可以通過SSLSocket
docs上的API級別查看支持的密碼列表。
嘗試在5.0或更高版本的設備上運行您的測試。例如,下面的代碼成功運行5.0的設備上,但得到的4.4.4的SSL例外 -
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().get().url("https://cert-test.sandbox.google.com/")
.build();
response = client.newCall(request).execute();
Log.d(TAG, "code = " + response.code());
但同樣也適用於同等URLConnection
碼 -
HttpsURLConnection con = (HttpsURLConnection) new URL("https://cert-test.sandbox.google.com/").openConnection();
con.connect();
Log.d(TAG, "code = " + con.getResponseCode());
問題不是改造或okhttp,而是舊手機提供的默認安全提供程序的限制。
您可以通過安裝新的提供程序來解決此問題。谷歌通過谷歌播放服務提供一個,並且易於安裝。一行(加上異常處理等)。
try {
ProviderInstaller.installIfNeeded(this);
} catch (GooglePlayServicesRepairableException e) {
// Fix it
} catch (GooglePlayServicesNotAvailableException e) {
// Skip it
}
對於一個完整的例子,看到谷歌"Updating Your Security Provider to Protect Against SSL Exploits"。
如果手機安裝了Google Play,這樣做將允許上述兩個代碼塊在較低的API版本上運行。
哪個okhttp庫版本正在使用? – Rajesh
我使用okhttp:2.4.0 –
請嘗試將其更新到2.5.0,然後再次檢查 – Rajesh