apache不内置证书剩余天数监控,需外部构建检查机制:可直接解析sslcertificatefile指定的pem证书文件,或通过openssl s_client实时探测线上443端口获取有效期,结合cron定时执行、分级告警与防重推送实现主动监控。

Apache 本身不内置证书剩余天数监控功能,它只负责加载和使用证书。要监控 SSL 证书剩余天数,需在 Apache 外部构建独立检查机制,通过读取证书文件或探测线上端口获取有效期,并结合脚本、定时任务与通知系统实现主动监控。
直接读取 Apache 配置中指定的证书文件
Apache 的 <virtualhost></virtualhost> 中通常用 SSLCertificateFile 指向 PEM 格式证书路径(如 /etc/ssl/certs/example.com.crt)。你可以直接解析该文件:
- 提取证书过期时间(UTC)并转为剩余天数:
openssl x509 -in /etc/ssl/certs/example.com.crt -noout -enddate | \ awk -F' = ' '{print $2}' | \ xargs -I{} date -d "{}" +%s 2>/dev/null | \ xargs -I{} echo $(( ({} - $(date +%s)) / 86400 )) - 返回值为正数即剩余天数,0 表示当天过期,负数表示已过期。
注意:确保路径与 Apache 实际加载的一致;若证书链合并存放,
openssl x509默认只处理第一个证书(通常是服务器证书),符合 Apache 使用习惯。
从线上服务实时探测(更真实反映生产状态)
尤其适用于前端有 CDN、负载均衡或自动续签的场景,避免因本地文件未同步导致误判:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | \
openssl x509 -noout -enddate | \
awk -F' = ' '{print $2}' | \
xargs -I{} date -d "{}" +%s 2>/dev/null | \
xargs -I{} echo $(( ({} - $(date +%s)) / 86400 ))
- 必须确保
example.comDNS 解析正确、443 端口可达; -
-servername参数启用 SNI,对多域名共用 IP 的虚拟主机必不可少。
将检查集成到运维流程中
-
定时执行:用
cron每日凌晨运行检测脚本,例如:0 3 * * * /opt/scripts/check-apache-ssl.sh >> /var/log/ssl-check.log 2>&1
-
分级告警(避免骚扰):
- 剩余 ≥30 天:无需通知
- 剩余 7–29 天:企业微信/邮件轻提醒
- 剩余 ≤3 天 或已过期:钉钉强提醒 + 运维值班电话触发
防重复推送:每次告警后记录域名和时间戳到
/tmp/ssl_alerted_example.com,下次执行前比对,同一天不重复发。
验证是否生效的关键动作
- 修改 Apache 配置后,务必重载服务:
sudo systemctl reload apache2(Debian/Ubuntu)或sudo apachectl graceful(通用); - 手动运行一次检测命令,确认输出合理(如返回
28表示还剩 28 天); - 检查脚本是否有执行权限、路径是否存在、OpenSSL 是否可用;
- 若用远程探测方式,临时关闭防火墙或 telnet 测试
telnet example.com 443是否通。
不复杂但容易忽略










