Apache证书过期预警需外部脚本实现:本地读取PEM文件或远程探测443端口获取证书,解析时间并计算剩余天数,按≤30天/≤7天分级预警,通过邮件或企微汇总通知,定时运行。

Apache 本身不检查证书是否快过期,得靠外部脚本定期扫描。核心思路是:要么读服务器上的证书文件(适合自托管),要么连域名 443 端口实时取证书(更贴近用户访问真实情况)。检测后按剩余天数分级预警,再通过邮件或企微通知负责人。
直接解析本地证书文件
如果你的证书明确放在服务器上(比如 /etc/ssl/certs/example.com.crt 或 Apache 配置里写的 SSLCertificateFile 路径),脚本可直接读取 PEM 文件:
- 用 openssl x509 -in /path/to/cert.crt -noout -dates 提取生效和过期时间
- 用 date -d "Aug 25 12:00:00 2026 GMT" +%s 把过期时间转为时间戳,再减去当前时间戳,算出剩余天数
- 注意跳过 PEM 文件里的私钥块(以 -----BEGIN RSA PRIVATE KEY----- 开头的部分),只处理第一个 -----BEGIN CERTIFICATE----- 块
- 建议设两级阈值:≤30 天发普通提醒,≤7 天发紧急通知
远程探测线上域名证书
不依赖服务器文件,而是模拟用户访问,直接连接目标域名的 HTTPS 端口获取当前生效的证书链:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 命令示例:echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates
- 支持批量检测:把域名列在 domains.txt 里,脚本逐行执行并汇总结果
- 必须做容错处理——连接超时、证书不可信、非 HTTPS 响应等不能让整个脚本中断,要记录日志并继续下一个
- 这个方式能发现 CDN 缓存旧证书、反向代理配置错误、或证书没真正部署成功等问题
集成通知与定时运行
光检测出来没用,关键是要让人看到:
- 检测到 ≤7 天时,调用企业微信机器人 API,发送 JSON 消息,含域名、过期时间、剩余天数
- 用 mail 命令发邮件,标题加【SSL 预警】前缀,方便运维过滤
- 别每个域名单独发一条——脚本应收集所有临期域名,一次发汇总提醒,避免刷屏
- 用 crontab 或 systemd timer 设置每天凌晨执行一次,例如:0 3 * * * /opt/scripts/check-ssl.sh
Java 实现的轻量方案
如果环境已有 Java,可用标准库写一个独立类,无需额外依赖:
- 读取 PEM 文件,剥离头尾、Base64 解码,用 CertificateFactory.getInstance("X.509") 加载
- 调用 X509Certificate.getNotAfter() 获取过期时间,与 new Date() 对比
- 支持忽略测试环境的自签名证书(按 SHA-256 指纹或域名白名单)
- 输出格式可统一为:example.com → expires at 2026-11-15 (86 days left)

















