Android – OkHttp 访问 https 的怪问题

💡 原文中文,约8700字,阅读约需21分钟。
📝

内容提要

最近使用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,以确保主机名一致性。

🏷️

标签

➡️

继续阅读