Android 4.x HTTPS请求SSL handshake aborted异常解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 4.x HTTPS请求SSL handshake aborted异常解决相关的知识,希望对你有一定的参考价值。

参考技术A android 4.x手机HTTPS请求抛出以下异常:

测试手机API 19 HUAWEI CHM-UL00,测试请求URL: https://gank.io/api/today 。

经过多方搜索得出问题原因大致如下:

https://developer.android.com/reference/javax/net/ssl/SSLSocket 上面列出了Android不同版本SSLSocket对于(SSL、TLS)协议版本支持情况。如下:

Client socket:

Server socket:

解决办法:

在服务端处于无法控制的情况下,只能考虑客户端处理,所以这篇文章将介绍,如何在Android客户端针对老版本进行启用TLSv1.2(基本上服务端都支持这个吧,可根据实际情况处理)。

网上有很多文章介绍这块,解决办法的源头应该是出自这里 https://github.com/square/okhttp/issues/2372 。

结合个人实践,来介绍下:

定义SSLSocketFactoryCompat,在创建Socket的时候如果是4.x的设备则启用TLSv1.2

如果客户端自己有提供SSLSocketFactory的情况(比如,客户端加载自己的证书会提供SSLSocketFactory),则使用SSLSocketFactoryCompat包裹自身的SSLSocketFactory然后进行设置,如果没有的话,则使用SSLSocketFactoryCompat的无参构造函数。

上述类可以用于OkHttp,也可用于其他HTTPS需要设置SSLSocketFactory的情况。

OkHttp使用

提供额外证书的情况:

HttpsURLConnection简单测试

以上是关于Android 4.x HTTPS请求SSL handshake aborted异常解决的主要内容,如果未能解决你的问题,请参考以下文章

expressJS 4.x + vhost + SSL / HTTPS

如何在改造中使用 ssl 证书发出 https 请求

Nginx安装 配置反向代理 负载均衡 upstream ssl证书提供https访问 ha nginx keepalived双主热备 LVS实现高可用负载 Keepalived+Lvs+Nginx

Android:发出 Https 请求

android okhttp https请求

如何监控 iOS/Android 设备中的 https/ssl 流量 [关闭]