使用 Zabbix 监控网站 SSL/TLS 证书过期
SSL (TLS) 证书是现代基础设施的关键部分,因此管理员必须确保它们不会过期并按时续订。本文向您展示如何使用 Zabbix 监控您的网站是否有过期的 SSL 证书。
在 Zabbix 的早期版本中,要监视 SSL 证书的过期情况,您必须使用控制台脚本,通过以下方式将值传递给 Zabbix:用户参数.Zabbix Agent 2允许您使用内置的检查证书上的信息网络证书插件。本文将介绍在 Zabbix 中监控 SSL 证书过期的两种方法。
内容:
在 Zabbix 上使用 WebCertificate 插件检查 SSL 证书过期
Zabbix代理2包含一个内置的 WebCertificate 插件,可让您检查网站证书信息。检查主机上是否安装了该版本的代理:
$ zabbix_agent2 -V

您可以使用 WebCertificate 插件直接从控制台获取有关站点证书的信息zabbix-get命令:
$ zabbix_get -s 127.0.0.1 -k web.certificate.get[woshub.com,443]
该命令应返回一个 JSON 对象,其中包含指定网站的证书属性。


Zabbix 中提供了内置模板“Zabbix agent 2 的网站证书”。用它来检查 TLS/SSL 证书到期日期。
- 转到配置 -> 主机并使用网站名称添加新主机;
- 创建一个新的主机组或选择一个现有的主机组;
- 指定模板Zabbix agent 2 的网站证书;
- 在中指定Zabbix代理的IP地址或名称界面部分(在我们的示例中,
127.0.0.1);

- 然后前往宏选项卡并单击继承宏和宿主宏;
- 在
{$CERT.WEBSITE.HOSTNAME}宏,指定要检查其证书的网站的 DNS 名称;

- 默认情况下,SSL 证书即将到期的警告将在到期日期前 7 天显示。您可以使用宏来增加该值
{$CERT.EXPIRY.WARN}; - 如果网站使用 443 以外的 TLS/SSL 端口,您可以使用宏指定它
{$CERT.WEBSITE.PORT}; - 保存设置。
现在,当站点的证书即将过期时,Zabbix 会向您发出警告。
在 Zabbix 中使用脚本监控 HTTPS 证书过期
您可以使用外部脚本来检索以前版本的 Zabbix 中的证书到期信息。 openssl 命令行工具允许您提取网站证书信息。
参见:什么是 SSL 证书?
创建 bash 脚本文件/usr/lib/zabbix/externalscripts/sslcert_expiration.sh使用以下代码::
#!/bin/bash
data=`echo | openssl s_client -servername $1 -connect $1:${2:-443} 2>/dev/null | openssl x509 -noout -enddate | sed -e 's#notAfter=##'`
ssldate=`date -d "${data}" '+%s'`
nowdate=`date '+%s'`
diff="$((${ssldate}-${nowdate}))"
echo $((${diff}/24/3600))
允许脚本运行:
$ sudo chmod +x /usr/lib/zabbix/externalscripts/sslcert_expiration.sh
此脚本返回证书到期前剩余的天数。检查脚本是否正常工作。
$ /usr/lib/zabbix/externalscripts/sslcert_expiration.sh woshub.com 443


该脚本返回该站点的证书在接下来的 79 天内有效。
现在您必须允许 Zabbix Agent 使用以下命令运行此自定义 bash 脚本用户参数范围。
$ sudo mcedit /etc/zabbix/zabbix_agent2.conf
添加:
UserParameter=sslcertexpire[*],/usr/lib/zabbix/externalscripts/sslcert_expiration.sh $1 $2


使用 UserParameter 中的脚本,您还可以检查 Zabbix 中域的过期日期。
重新启动代理:
$ sudo service zabbix-agent2 restart
检查Zabbix代理是否可以通过新参数接收数据。您可以使用zabbix-get用于测试代理响应的命令:
$ zabbix_get -s 127.0.0.1 -p 10050 -k sslcertexpire[woshub.com,443]
现在添加一个新模板检查SSL证书有效期监控 Zabbix 中 HTTPS 证书的过期情况。
在 Items 选项卡中,添加一个参数
- 名称:SSL 证书剩余有效期
{$DOMAINNAME} - 类型:Zabbix代理
- 钥匙:
sslcertexpire[{$DOMAINNAME},{$SSL_PORT}] - 信息类型:数字(无符号)
- 更新间隔:1d
- 病史:90天
- 趋势:365d


然后添加一个新的触发器:
- 名称:SSL 证书
{$DOMAINNAME}即将到期 - 表达:
last(/CheckSSLCertExpiration/sslcertexpire[{$DOMAINNAME},{$SSL_PORT}])<20 - 严重性:高
如果 SSL 证书到期时间不足 20 天,此触发器将生成警报。
您可以添加恢复触发参数:
Recovery expression: last(/CheckSSLCertExpiration/sslcertexpire[{$DOMAINNAME},{$SSL_PORT}])>20


现在为您的站点添加一个新主机到 Zabbix代理人接口类型。
在宏选项卡中,添加两个参数:服务器名称和要检查 SSL 证书的端口:
- 宏:
{$DOMAINNAME} - 价值:
woshub.com
和
- 宏:
{$SSL_PORT} - 价值:
443


将之前创建的 CheckSSLCertExpiration 模板分配给主机。
现在检查最新数据。 Zabbix 显示该站点的 SSL 证书将在 79 天后过期。


要通知管理员 SSL 证书需要尽快续订,您可以启用电子邮件或消息通知。
