Android – OkHttp 访问 https 的怪问题
内容提要
最近使用OkHttp访问https请求时遇到了一些问题,经过实践发现是由于https证书协议不匹配导致的。在装备OkHttp时,需要注意服务端支持的ssl协议,并相应地配置SSLSocketFactory和HostnameVerifier。在Android设备上可能会出现一些问题,如协议错误和类型转换异常,需要根据具体情况进行处理。建议使用TLSv1.2作为最低支持标准,并根据服务端证书进行配置。
关键要点
-
使用OkHttp访问https请求时,可能会遇到https证书协议不匹配的问题。
-
服务端的https证书主要分为SSL和TLS两种协议,TLS是SSL的升级版。
-
OkHttp支持的https证书协议包括SSLv3、TLSv1、TLSv1.1、TLSv1.2和TLSv1.3,但从2014年起已不再支持SSLv3。
-
建议使用TLSv1.2作为最低支持标准,并根据服务端证书进行配置。
-
在特殊情况下,可能需要手动配置SSLSocketFactory和HostnameVerifier。
-
常见问题包括SSL握手失败和类型转换异常,需根据具体情况进行排查。
-
Android设备对TLS协议的支持情况不同,需确认设备是否支持所用的TLS版本。
-
在Android 4.x设备上,TLSv1.2默认未启用,需强制启用以解决问题。
-
自定义SSLSocketFactory和SSLSocket可以解决某些兼容性问题。
-
文章提供了相关代码示例和GitHub链接供参考。
延伸问答
使用OkHttp访问HTTPS时常见的问题有哪些?
常见问题包括SSL握手失败和类型转换异常,通常与协议不匹配或设备支持的TLS版本有关。
如何配置OkHttp以支持TLSv1.2?
需要自定义SSLSocketFactory并强制启用TLSv1.2,确保在创建Socket时设置相应的协议。
为什么在Android 4.x设备上可能无法使用TLSv1.2?
因为TLSv1.2在Android 4.x设备上默认未启用,需要手动强制启用才能解决问题。
OkHttp支持哪些HTTPS证书协议?
OkHttp支持的HTTPS证书协议包括SSLv3、TLSv1、TLSv1.1、TLSv1.2和TLSv1.3,但自2014年起不再支持SSLv3。
如何处理SSL握手失败的问题?
首先检查客户端使用的证书协议与服务端支持的协议是否一致,必要时调整OkHttp的SSLSocketFactory配置。
在使用OkHttp时,如何配置HostnameVerifier?
可以通过OkHttpClient.Builder中的hostnameVerifier方法来配置HostnameVerifier,以确保主机名一致性。