“此网站无法提供安全连接”?一次 HTTPS 证书加载故障排查

问题背景

某日,部门同事反馈多个网站域名访问失败,浏览器报错“此网站无法提供安全连接”,错误码为ERR_SSL_PROTOCOL_ERROR。

作为运维人员,第一反应是 HTTPS 证书可能存在问题,比如过期或加载失败。环境使用的是 APISIX+ETCD部署的代理,且上一任维护者未留下任何维护文档,这让问题的排查变得更加复杂。

初步检查:证书过期的可能性排除

登录 APISIX 的 Dashboard管理界面,发现证书的过期时间为2025年,可以排除证书过期的可能性。但浏览器依然报错,提示无法建立安全连接。

为了进一步确认证书问题,直接通过 ETCD 查询证书的 Key 值:

复制
etcdctl get / --prefix --keys-only | grep -i ssl /apisix-user/ssl/ /apisix-user/ssls/585922421492811006 /apisix/ssl/1.2.3.4.

通过 etcdctl get /apisix-user/ssls/585922421492811006 查看证书内容,与 Dashboard 上的证书完全一致。这表明 ETCD 数据没有问题,但问题依然没有找到。

深入分析:查看 APISIX 日志

通过查看 APISIX 的日志,发现以下报错信息

复制
2024/12/13 06:04:00 [error] 21399#21399: *223993 [lua] radixtree_sni.lua:145: match_and_set(): failed to find any SSL certificate by SNI: test2.hello.cn, context: ssl_certificate_by_lua*, client: 120.183.123.80, server: 0.0.0.0:4431.2.3.4.5.

这提示 APISIX 在通过 SNI 加载 SSL 证书时,未能找到对应的证书

此时我突发奇想,在dashboard界面删除证书,重新上传

提交后,域名既然可以正常访问了,奇怪的是刚开心不到几秒,再次出现“此网站无法提供安全连接”现象,真让人崩溃

查看apisix服务状态,发现服务既然重启过,这是一个异常点,怀疑可能是 APISIX 服务不断重启导致加载失败。

于是检查系统定时任务:

复制
[root@etcd-apixi ~]# crontab -l * * * * * /opt/apisix-cleandisk.sh1.2.

此定时任务在每分钟运行一次

问题发现:定时任务引发服务中断

查看脚本内容:

复制
#!/bin/bash threshold=50 usage=$(df -h /| awk NR==2{print $5}| cut -d%-f1) if["$usage"-gt "$threshold"];then echo "Disk usage is above $threshold%. Cleaning up logs..." sudo systemctl stop apisix sudo rm -f /usr/log/apisix/logs/* sudo systemctl start apisix echo "Log cleanup complete." else echo "Disk usage is below $threshold%. No cleanup needed." fi1.2.3.4.5.6.7.8.9.10.11.12.

这个脚本每分钟检查磁盘使用率是否超过 50%,若超过,则停止 APISIX 服务以清理日志文件,再重启服务。

复制
[root@etcd-apisix logs]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 3.8G 0 3.8G 0% /dev tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 3.9G 425M 3.5G 11% /run tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/vda1 100G 51G 50G 51% / tmpfs 783M 0 783M 0% /run/user/01.2.3.4.5.6.7.8.

检查磁盘空间为51%,符合清理条件,定时任务的执行频率为 每分钟一次,即便磁盘使用率低于阈值,APISIX 的日志清理逻辑也会被频繁触发apisix重启。

APISIX 需要一定时间完成启动过程,包括证书和路由的加载。频繁重启会造成启动尚未完成,新的重启操作已开始,此时访问就会出现失败。

注释定时任务后,问题果然解决,此次问题排查并没有深入的理论知识,很多运维问题没有头绪时,要留意定位过程中的异常现象。

阅读剩余
THE END