apache不内置ssl证书监控告警功能,需额外部署独立监控系统或脚本,定期检查各域名证书有效期、链完整性及sni响应,并触发通知。
apache 本身不内置 ssl 证书监控告警功能,sni(server name indication)只是 tls 握手阶段让服务器按域名选择对应证书的协议机制,它不负责检测、提醒或上报证书状态。要实现“多域名 ssl 的监控告警”,需在 apache 基础配置之上,额外部署独立的监控系统或脚本,定期检查各域名证书的有效期、链完整性、sni 响应是否正确,并触发通知。
下面分三块说明关键动作:
确认 SNI 已正确启用并生效
这是监控的前提——如果 SNI 没配对或未被客户端识别,监控再准也查不到真实服务状态。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 确保 Apache 版本 ≥ 2.4.8(SNI 支持稳定);执行
httpd -v或apache2 -v验证 - 每个域名必须有独立的
<virtualhost></virtualhost>块,含ServerName和完整证书路径(SSLCertificateFile、SSLCertificateKeyFile、SSLCertificateChainFile) - 全局配置中启用
SSLStrictSNIVHostCheck off(放在所有<virtualhost></virtualhost>外),避免旧客户端 fallback 失败 - 用命令验证 SNI 是否响应正确:
openssl s_client -connect site-a.test:443 -servername site-a.test -showcerts 2>/dev/null | openssl x509 -noout -dates
替换site-a.test为你的域名,观察返回的notAfter是否匹配预期
为每个域名单独提取证书信息
监控脚本需能按域名维度获取证书元数据(尤其有效期),不能只扫一个端口就默认全站一致。
- 把所有域名和对应
SSLCertificateFile路径整理成清单,例如:site-a.test → /etc/ssl/certs/site-a.crtapi.example.com → /etc/ssl/certs/api.example.com.crt - 用
openssl x509 -in /path/to/cert.crt -noout -enddate提取过期时间 - 检查证书链是否完整:
openssl verify -untrusted /path/to/chain.crt /path/to/cert.crt(返回 OK 才算有效) - 可封装为简单 Shell 函数,传入域名自动定位配置+读取证书
搭建轻量级监控与告警
无需重型平台,一个定时脚本 + 邮件/钉钉/Webhook 就够用。重点是:提前预警(建议提前 15 天)、按域名分级通知、失败时明确指出哪个域名出问题。
- 用
cron每日执行一次检查脚本(如0 3 * * * /opt/ssl-check/check-all.sh) - 脚本逻辑示例:
▪ 遍历域名列表
▪ 对每个域名运行openssl s_client连接 + 证书解析
▪ 计算剩余天数,若 ≤15 则记录告警项
▪ 若任一域名证书无效、过期、链错误,汇总生成文本并调用curl推送钉钉机器人 - 推荐工具组合:
✅ certbot(自带certbot certificates查状态,适合 Let’s Encrypt)
✅ ssllabs-scan(API 方式扫描评分,支持多域名批量)
✅ ssl-cert-check(老牌 Perl 脚本,可直接指定域名和端口检测)










