可通过shell脚本定期检查nginx ssl证书剩余天数并用企业微信机器人告警:提取证书过期时间戳,计算剩余天数,低于阈值时调用webhook发送markdown格式消息,配合定时任务与日志记录实现自动化监控。

可以通过 Shell 脚本定期检查 Nginx 所用 SSL 证书的剩余天数,结合企业微信机器人 Webhook 实现自动告警。核心是提取证书信息、计算过期时间、设定阈值并推送消息。
获取证书剩余天数
SSL 证书通常由 Nginx 的 ssl_certificate 指令指定,路径一般在 /etc/nginx/ssl/ 或 /usr/local/nginx/conf/ssl/ 下。使用 OpenSSL 命令可直接读取证书文件并计算剩余天数:
- 执行命令:
openssl x509 -in /path/to/fullchain.pem -enddate -noout | cut -d= -f2 | xargs -I{} date -d "{}" +%s 2>/dev/null获取过期时间戳 - 用当前时间戳减去该值,再除以 86400,即可得剩余天数(取整)
- 若证书为远程域名(如未本地部署),可用
openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -enddate -noout抓取线上证书
编写检测与告警脚本
新建脚本 /opt/scripts/check_ssl.sh,内容包含证书路径、告警阈值(如 15 天)、企业微信 Webhook 地址:
由于微信的大热,为了更好的方便使用微信的用户查询一些信息,这篇文章是入门级的微信公众平台开发教程,需要的朋友可以参考下 这篇入门教程将引导你完成如下任务: 创建百度云平台应用启用微信公众平台开发模式获取订阅、文字、图片、语音、视频消息回复文本、图文及音乐消息程序开发
- 脚本需支持多个证书批量检查,每条记录格式为
域名,证书路径,私钥路径(可选) - 对每个证书调用 OpenSSL 提取有效期,判断是否低于阈值
- 触发告警时,用
curl -X POST向企业微信机器人地址发送 JSON 消息,含标题、域名、剩余天数、过期时间 - 建议添加日志记录(如写入
/var/log/ssl_check.log)和错误捕获(避免证书损坏导致脚本中断)
配置定时任务与权限
让脚本每天凌晨 2 点运行一次,确保及时发现即将过期的证书:
- 编辑 crontab:
0 2 * * * /bin/bash /opt/scripts/check_ssl.sh >> /var/log/ssl_check_cron.log 2>&1 - 确保执行用户(如
www-data或root)有读取证书文件的权限;若证书权限为600,可将用户加入对应组或临时放宽读权限(不推荐直接 chmod 644,应优先用组权限控制) - 脚本开头加上
#!/bin/bash,并用chmod +x添加执行权限
企业微信消息格式与测试
企业微信机器人要求消息体为 JSON,类型为 text 或 markdown。推荐使用 markdown 提升可读性:
- 示例字段:
{"msgtype": "markdown", "markdown": {"content": "⚠️ SSL 证书告警\n> 域名:example.com\n> 剩余有效期:12 天\n> 过期时间:2025-06-30"}} - 先手动运行脚本测试消息是否成功接收;失败时检查 Webhook URL 是否正确、是否开启“仅限指定 IP”限制(需放行服务器出口 IP)
- 可在脚本中加判断:仅当剩余天数 ≤ 阈值且上次告警时间超过 24 小时才推送,避免重复刷屏
不复杂但容易忽略的是证书链顺序、多域名 SAN 证书的统一管理,以及企业微信机器人安全设置。只要路径、权限、Webhook 三者准确,就能稳定运行。










