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