2015-09-29 13 views
1

我已經使用Google地點和方向API集成的改造。最近我從Google Maps for Work支持團隊獲得了更新,爲了確保您的應用程序不受影響,您需要驗證您正在使用的HTTPS客戶端是否支持SHA-256。改裝不能使用sha256的地圖api測試網址

他們提供了一個測試URL(https://cert-test.sandbox.google.com),以驗證HTTP客戶端兼容或不

我已經使用https://cert-test.sandbox.google.com與改造,以驗證卻是失敗,讓我異常如下所述:

javax.net.ssl.SSLHandshakeException:javax.net.ssl.SSLProtocolException:SSL握手中止:SSL = 0x1027ce0:失敗在SSL庫,通常一個協議錯誤

爲了清楚起見,我已經使用純okhttpclient用這種集成。

如果有人解決了問題,請確實需要。

+0

哪個okhttp庫版本正在使用? – Rajesh

+0

我使用okhttp:2.4.0 –

+0

請嘗試將其更新到2.5.0,然後再次檢查 – Rajesh

回答

0

看起來服務器使用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版本上運行。