"此網(wǎng)站無(wú)法提供安全連接"?一次 HTTPS 證書加載故障排查
問(wèn)題背景
某日,部門同事反饋多個(gè)網(wǎng)站域名訪問(wèn)失敗,瀏覽器報(bào)錯(cuò)“此網(wǎng)站無(wú)法提供安全連接”,錯(cuò)誤碼為ERR_SSL_PROTOCOL_ERROR。
作為運(yùn)維人員,第一反應(yīng)是 HTTPS 證書可能存在問(wèn)題,比如過(guò)期或加載失敗。環(huán)境使用的是 APISIX+ETCD部署的代理,且上一任維護(hù)者未留下任何維護(hù)文檔,這讓問(wèn)題的排查變得更加復(fù)雜。
初步檢查:證書過(guò)期的可能性排除
登錄 APISIX 的 Dashboard管理界面,發(fā)現(xiàn)證書的過(guò)期時(shí)間為2025年,可以排除證書過(guò)期的可能性。但瀏覽器依然報(bào)錯(cuò),提示無(wú)法建立安全連接。
為了進(jìn)一步確認(rèn)證書問(wèn)題,直接通過(guò) ETCD 查詢證書的 Key 值:
etcdctl get / --prefix --keys-only | grep -i ssl
/apisix-user/ssl/
/apisix-user/ssls/585922421492811006
/apisix/ssl/
通過(guò) etcdctl get /apisix-user/ssls/585922421492811006
查看證書內(nèi)容,與 Dashboard 上的證書完全一致。這表明 ETCD 數(shù)據(jù)沒(méi)有問(wèn)題,但問(wèn)題依然沒(méi)有找到。
深入分析:查看 APISIX 日志
通過(guò)查看 APISIX 的日志,發(fā)現(xiàn)以下報(bào)錯(cuò)信息
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:443
這提示 APISIX 在通過(guò) SNI 加載 SSL 證書時(shí),未能找到對(duì)應(yīng)的證書。
此時(shí)我突發(fā)奇想,在dashboard界面刪除證書,重新上傳
提交后,域名既然可以正常訪問(wèn)了,奇怪的是剛開(kāi)心不到幾秒,再次出現(xiàn)“此網(wǎng)站無(wú)法提供安全連接”現(xiàn)象,真讓人崩潰
查看apisix服務(wù)狀態(tài),發(fā)現(xiàn)服務(wù)既然重啟過(guò),這是一個(gè)異常點(diǎn),懷疑可能是 APISIX 服務(wù)不斷重啟導(dǎo)致加載失敗。
于是檢查系統(tǒng)定時(shí)任務(wù):
[root@etcd-apixi ~]# crontab -l
* * * * * /opt/apisix-cleandisk.sh
此定時(shí)任務(wù)在每分鐘運(yùn)行一次
問(wèn)題發(fā)現(xiàn):定時(shí)任務(wù)引發(fā)服務(wù)中斷
查看腳本內(nèi)容:
#!/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."
fi
這個(gè)腳本每分鐘檢查磁盤使用率是否超過(guò) 50%,若超過(guò),則停止 APISIX 服務(wù)以清理日志文件,再重啟服務(wù)。
[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/0
檢查磁盤空間為51%,符合清理?xiàng)l件,定時(shí)任務(wù)的執(zhí)行頻率為 每分鐘一次,即便磁盤使用率低于閾值,APISIX 的日志清理邏輯也會(huì)被頻繁觸發(fā)apisix重啟。
APISIX 需要一定時(shí)間完成啟動(dòng)過(guò)程,包括證書和路由的加載。頻繁重啟會(huì)造成啟動(dòng)尚未完成,新的重啟操作已開(kāi)始,此時(shí)訪問(wèn)就會(huì)出現(xiàn)失敗。
注釋定時(shí)任務(wù)后,問(wèn)題果然解決,此次問(wèn)題排查并沒(méi)有深入的理論知識(shí),很多運(yùn)維問(wèn)題沒(méi)有頭緒時(shí),要留意定位過(guò)程中的異?,F(xiàn)象。