#码力全开·技术π对#Android开发:OkHttp出现SSLHandshakeException的常见原因?

  1. ​OkHttp​​出现SSLHandshakeException的常见原因?


Android
OkHttp
SSLHandshakeExce
鱼弦CTO
2025-05-07 11:14:40
浏览
收藏 0
回答 2
待解决
回答 2
按赞同
/
按时间
周周的奇妙编程
周周的奇妙编程

最常见的就是服务器端的SSL证书问题,比如证书不是由可信任的CA签发或者是自签名的,这会导致客户端无法验证服务器身份而握手失败。另外,如果服务器配置支持的TLS版本过低,而客户端又禁用了不安全的旧版协议,也会引发这个问题。有时,设备系统的日期和时间设置不正确,导致证书验证失败,同样会造成类似异常。面对这种情况,我会检查服务器证书的有效性,并确保客户端与服务器之间的TLS版本兼容,同时也会留意系统时间这类看似无关却可能造成问题的小细节。通过这些步骤,大多数SSL握手问题都能得到解决。

分享
微博
QQ
微信https://www.51cto.com/aigc/
回复
2025-05-07 14:23:57
莹莹浮动的尘埃
莹莹浮动的尘埃

 服务器使用了不受支持的TLS版本

  • Android某些版本(尤其是Android 4.x)默认不支持 TLS 1.2 或 TLS 1.3。
  • 解决方案:
  • 确保服务器支持 TLS 1.2 及以上。
  • 对于 Android < 5.0 的设备,使用如下代码强制启用 TLS 1.2:
  • if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
    try {
        ProviderInstaller.installIfNeeded(context);
        SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
        sslContext.init(null, null, null);
        OkHttpClient client = new OkHttpClient.Builder()
            .sslSocketFactory(new Tls12SocketFactory(sslContext.getSocketFactory()), trustManager)
            .build();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
分享
微博
QQ
微信https://www.51cto.com/aigc/
回复
2025-05-16 10:01:58
发布
相关问题
提问