等我赶过去排查花了不到3分钟——全站通配符SSL证书全链+根证书全部过期了整整72小时!之前他们刚招的半年经验后端兼职管服务器,嫌SSL提醒麻烦直接把云服务商免费的邮件和短信都关了,日历里只设了证书到期当天的提醒,那天正好赶上周六团建忙忘了。
说实话,做了6年一线运维,这种踩SSL过期“定时炸弹”的事,真的见过不下20起,入行1-3年的新手或者后端代管的小团队最容易栽。别以为商用证书贵、自动续费就行,很多小公司砍预算把自动续费砍了;也别光依赖云服务商的基础提醒,万一是自己托管的服务器+自签/免费Let’s Encrypt证书?或者云服务商邮件被当成垃圾邮件过滤、短信漏发呢?
今天就给大家整理2026年能用的三种直接落地、不用额外搭复杂系统的线上生产服务器SSL证书过期提醒设置,不管你用的是托管云证书还是自搭的Let’s Encrypt,总有一款适合。
先给新手小白或者用免费Let’s Encrypt Certbot的小团队提个醒:Certbot本身其实自带过期后自动续期和续期前的本地邮件提醒,但默认本地邮件可能没配置SMTP发送,根本收不到。
那怎么让Certbot续期前(比如提前30天、7天、1天)给你发企业微信/钉钉群消息?毕竟现在中小团队很少天天盯着运维邮箱了,群消息才是刚需。我个人更推荐用shell脚本配合云服务商的SMTP服务或者群机器人,简单直接,不需要额外安装依赖库。
先写一个用阿里云SMTP发送邮件的通用shell脚本,不管你用的是哪种SSL证书,只要知道证书的.pem文件路径就能用。脚本可以放在/usr/local/bin/check_ssl.sh目录下,先给你们贴完整代码:
#!/bin/bash
线上生产服务器SSL证书过期提醒脚本(支持阿里云SMTP)
作者:6年运维老炮
日期:2026年
配置区(根据你的实际情况修改)
CERT_PATH="/etc/nginx/ssl/your_domain.pem" # 替换成你的SSL证书公钥路径
ALERT_DAYS=30 # 提前多少天发送提醒
SMTP_SERVER="smtpdm.aliyun.com" # 阿里云SMTP服务器地址,固定
SMTP_PORT=465 # 阿里云SMTP加密端口,固定
SMTP_USER="your_sender@your_domain.com" # 替换成你的阿里云邮件推送发信地址
SMTP_PASS="your_smtp_password" # 替换成你的阿里云邮件推送发信密码(注意是授权码不是邮箱密码)
RECIPIENT="your_receiver1@your_domain.com,your_receiver2@your_domain.com" # 替换成接收提醒的邮箱,多个用逗号分隔
检查证书文件是否存在
if [ ! -f "$CERT_PATH" ]; then
echo "错误:SSL证书文件 $CERT_PATH 不存在!"
exit 1
fi
计算证书剩余天数
EXPIRY_DATE=$(openssl x509 -in "$CERT_PATH" -noout -dates | grep notAfter | cut -d= -f2)
EXPIRY_SECONDS=$(date -d "$EXPIRY_DATE" +%s)
CURRENT_SECONDS=$(date +%s)
REMAINING_DAYS=$(( (EXPIRY_SECONDS
CURRENT_SECONDS) / 86400 ))
输出调试信息(可以去掉)
echo "证书域名:$(openssl x509 -in "$CERT_PATH" -noout -subject | cut -d= -f5)"
echo "证书过期时间:$EXPIRY_DATE"
echo "剩余天数:$REMAINING_DAYS"
如果剩余天数小于等于ALERT_DAYS,发送提醒邮件
if [ "$REMAINING_DAYS" -le "$ALERT_DAYS" ]; then

SUBJECT="⚠️ 线上生产服务器SSL证书即将过期!剩余$REMAINING_DAYS天"
CONTENT="各位好,线上生产服务器的SSL证书即将过期,请及时处理!nn证书域名:$(openssl x509 -in "$CERT_PATH" -noout -subject | cut -d= -f5)n证书过期时间:$EXPIRY_DATEn剩余天数:$REMAINING_DAYSnn服务器IP:$(hostname -I | awk '{print $1}')"
# 发送邮件(需要安装mailx,CentOS用yum install -y mailx,Ubuntu用apt install -y mailutils)
echo -e "$CONTENT" | mailx -s "$SUBJECT" -S smtp="$SMTP_SERVER:$SMTP_PORT" -S smtp-auth=login -S smtp-auth-user="$SMTP_USER" -S smtp-auth-password="$SMTP_PASS" -S ssl-verify=ignore -S nss-config-dir=/etc/pki/nssdb "$RECIPIENT"
fi
写完脚本记得给执行权限:chmod +x /usr/local/bin/check_ssl.sh,然后可以先手动执行一遍测试一下能不能收到邮件:/usr/local/bin/check_ssl.sh。如果没问题,就可以加个crontab定时任务,每天早上8点自动执行检查:crontab -e,在最后一行加0 8 * /usr/local/bin/check_ssl.sh >> /var/log/check_ssl.log 2>&1,加日志是为了排查问题,不然哪天脚本没执行都不知道。
这里有两个新手专属避坑提醒,一定要记牢:
第一个是证书路径别只填公钥,最好填包含私钥的pem文件或者根证书链全文件,不然有些脚本可能检测不到正确的过期时间。第二个是crontab定时任务的时区,很多新手安装完Linux服务器没改时区,用的是UTC时间,导致定时任务在半夜执行或者没按时执行, 先执行timedatectl set-timezone Asia/Shanghai把时区改成上海时间。
除了阿里云SMTP,我还给你们准备了一个企业微信群机器人提醒的版本,这个更方便,不需要安装mailx,直接用curl就行,脚本逻辑差不多,就是把发送邮件的部分换成调用企业微信的API。企业微信群机器人怎么获取?打开企业微信→对应群→右上角三个点→群机器人→添加机器人→复制webhook地址,然后把脚本里的WEBHOOK_URL替换成你的就行。
企业微信群机器人版本的核心代码片段(配置区和检查证书部分和上面一样):
# 企业微信群机器人提醒核心代码
if [ "$REMAINING_DAYS" -le "$ALERT_DAYS" ]; then
WEBHOOK_URL="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=your_webhook_key" # 替换成你的企业微信群机器人webhook地址
CONTENT="⚠️ 【紧急提醒】线上生产服务器SSL证书即将过期!剩余$REMAINING_DAYS天nn证书域名:$(openssl x509 -in "$CERT_PATH" -noout -subject | cut -d= -f5)n证书过期时间:$EXPIRY_DATEn服务器IP:$(hostname -I | awk '{print $1}')"
# 调用企业微信API发送消息
curl -X POST "$WEBHOOK_URL"
-H 'Content-Type: application/json'
-d "{
"msgtype": "text",
"text": {
"content": "$CONTENT"
}
}"
fi
最后再补充一句,如果你们用的是阿里云、腾讯云、华为云这些主流云服务商的托管SSL证书,除了基础的邮件和短信提醒,还可以在云服务商的控制台里设置更多提醒渠道,比如企业微信、钉钉、飞书的群机器人,或者直接打电话给运维负责人(有些高级套餐才有), 把能开的提醒渠道都开了,多一层保障多一份安心。
你们在运维工作中有没有遇到过类似的SSL证书过期的坑?欢迎在评论区分享你的排查经验和解决办法,大家一起避坑!

评论列表 (0条):
加载更多评论 Loading...