android - 改造不适用于 sha256 测试 url 的 map api

标签 android google-maps ssl retrofit

我已经对 google Places 和 direction API 集成进行了改造。最近我从 Google Maps for Work 支持团队那里得到了更新,为了确保您的应用程序不受影响,您需要验证您使用的 HTTPS 客户端是否支持 SHA -256.

他们提供了一个测试 url( https://cert-test.sandbox.google.com ) 来验证 http-client 是否兼容

我用过https://cert-test.sandbox.google.com使用 Retrofit 进行验证,但它失败了,并给出了如下所述的异常:

javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL 握手中止: ssl=0x1027ce0: SSL 库失败,通常是协议(protocol)错误

需要说明的是,我在此集成中使用了普通的 okhttpclient。

如果有人有修复,请做必要的。

最佳答案

看起来服务器正在使用 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 版本上运行。

关于android - 改造不适用于 sha256 测试 url 的 map api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32837416/

相关文章:

android - 下拉android时SwipeRefreshLayout加载器不会启动

android - 如何只清除应用程序的缓存而不清除其他数据(共享偏好)

java - Android 上的单元测试事件序列

android - 日历事件 action_insert 上的 startActivityForResult 未返回到应用程序

ssl - Linux (RHEL 7.1) 上 DotNet Core 中的可信根证书

windows - 添加客户端证书后,在使用 Python 和 Postman 的 Windows 上为 "unable to get local issuer certificate"

JavaScript Promise 跳过了 for 循环并立即解决

javascript - Google map 上的 JSON feed 没有显示任何内容

javascript - 谷歌地图无法在类型之间进行更改

java - 使用 Java 忽略 SSL 证书错误