玩命狂奔的间隙,莫忘记抬头看看前路的星光

0%

低版本安卓或iOS系统设备https请求出错(SSL不兼容)

今天客户反馈说,微信小程序登录的时候报错,无法登录。测试下来,我这边几个手机,客户公司的其他手机都能正常使用,就这个客户不行。
一开始还以为是从微信获得用户手机号时token或者code出错之类的,查看服务端日志却无法查看到任何日志。将具体出错信息在客户手机上显示出来,具体错误消息:

1
2
request:fail errcode:-113 cronet error coce:-113 error msg:net::ERR SSL VERSION
OR CIPHER MISMATCH

原来是ssl版本或算法不兼容的问题。

客户手机时ios 16.2,这个版本对最新的ssl证书不兼容,需要增加一些算法,提高服务器接口的ssl兼容性。

1
2
3
4
5
# 加密套件(兼顾安全性和兼容性)
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:
ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:
ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305';
   ssl_prefer_server_ciphers off; #这里让客户端去选择使用什么算法

要注意确保设置完整的证书存放路径,不然也无法解决的,幸好我使用的免费证书工具本来就自动设置了这些:

1
2
ssl_certificate /etc/letsencrypt/live/your.domain.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/your.domain.com/privkey.pem; # managed by Certbot

更新了nginx配置后,自己测试了下,服务器没有挂能正常运行

1
2
sudo nginx -t #测试一下,测试通过才能继续reload
sudo systemctl reload nginx

再请客户测试一下,完美!