Android日常开发(24)[ERROR:ssl_client_socket_impl.cc(946)] handshake failed; returned -1, SSL error code

时间:2024-03-24 12:46:21

前言

最近遇到一个棘手的问题,解决问题的方法有很多,但是最重要的是查明问题的原因。一开始我认为是webview的问题,因为这个问题在ios的手机上面没有出现,在android的手机上出现了。

问题日志

[INFO:CONSOLE(0)] “The connection used to load resources from https://login.xxxxx.com:8080 used TLS 1.0 or TLS 1.1, which are deprecated and will be disabled in the future. Once disabled, users will be prevented from loading these resources. The server should enable TLS 1.2 or later. See https://www.chromestatus.com/feature/5654791610957824 for more information.”, source: https://login.xxx:8699/?redirect=https://xxxxx.yyy.com:8090/mobile/leader (0)

[ERROR:ssl_client_socket_impl.cc(946)] handshake failed; returned -1, SSL error code 1, net_error -202

日志内容分析

说是服务端配置的TLS版本不对应该启用1.2甚至更高。但是问题远远没有那么简单

使用TLS工具分析一波:这里推荐:https://myssl.com/ssl.html

Android日常开发(24)[ERROR:ssl_client_socket_impl.cc(946)] handshake failed; returned -1, SSL error code

对比一下我的网站
Android日常开发(24)[ERROR:ssl_client_socket_impl.cc(946)] handshake failed; returned -1, SSL error code
嗯,应该是TLS配置的问题了。回想一下我之前的nginx配置,问题应该就出现在这个地方

配置指南:

  1. 需要配置符合PFS规范的加密套件,推荐配置:
    ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE ;
  2. 需要在服务端TLS协议中启用TLS1.2,推荐配置:TLSv1 TLSv1.1 TLSv1.2 ;
  3. 需要保证当前域名与所使用的证书匹配;
  4. 需要保证证书在有效期内;
  5. 需要使用SHA-2签名算法的证书;
  6. 需要保证证书签发机构是可信的CA机构。
  7. HSTS(HTTP严格传输安全)的 max-age 需要大于15768000秒。
  8. 《HTTPS 安全最佳实践》

让服务端修改nginx配置

结束语

找到问题原因防止甩锅,android和ios差异还是很大的,搞不懂苹果的手机怎么能行?难道是手机不安全?我的猜测而已O(∩_∩)O