财务同事打开公司的报销系统,页面变成一只恐龙,错误码 net::err_ssl_protocol_error。她以为网线松了,重启了路由器,问题还在。
这个错误的意思是 TLS 握手失败:浏览器发了 https 请求,服务器回的东西它看不懂。网络是通的,域名也解析到了,卡在加密协商这一段。
先排三件最常见的事
一是系统时间。主板电池没电,时间退回2018年,证书校验直接不过。看右下角日期,差一天都可能出问题,打开自动同步。二是证书过期,点地址栏的锁图标看有效期,过期了只能让运维换。三是服务器太老,只支持 TLS 1.0,Chrome 早就默认不协商这个版本了,同样是运维侧要改配置。
公司网络里的中间设备
带内容过滤的防火墙、上网行为管理、杀毒软件的HTTPS扫描,都会在中间替换证书。客户端不信任这张证书,握手一样失败。判断方法:连手机热点访问同一地址,能打开就是公司网络的问题,找网管把域名加白名单。
http 和 https 混用
有的内网系统只开了 80 端口,你手动加了 s 变成 https,服务器根本不会应答。把协议改回去试试。反过来,强制跳转 https 的站点如果证书配错,从 http 进去也会报同一个错。
不建议的处理方式
网上教你关掉证书校验、装一个忽略风险的插件,这类做法等于把加密层拆了,密码和会话都可能被中间人拿走。临时绕过只适合自己调试,不能当成解决方案。错误码指向的是服务端配置,客户端这边能做的有限。
看握手过程最快
用 curl -v 访问同一个地址,输出里能看到协商到哪个 TLS 版本、服务器返回什么证书。命令行同样报 handshake failure,基本可以确定不是浏览器的问题。给运维报错时附上这段输出,比描述现象省好几轮沟通。
顺序是时间、证书、运维,别跳步。