使用 Zabbix 监控网站 SSL/TLS 证书过期

Jacki

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 证书到期日期。

  1. 转到配置 -> 主机并使用网站名称添加新主机;
  2. 创建一个新的主机组或选择一个现有的主机组;
  3. 指定模板Zabbix agent 2 的网站证书;
  4. 在中指定Zabbix代理的IP地址或名称界面部分(在我们的示例中,127.0.0.1);
  5. 然后前往选项卡并单击继承宏和宿主宏;
  6. {$CERT.WEBSITE.HOSTNAME}宏,指定要检查其证书的网站的 DNS 名称;
  7. 默认情况下,SSL 证书即将到期的警告将在到期日期前 7 天显示。您可以使用宏来增加该值{$CERT.EXPIRY.WARN};
  8. 如果网站使用 443 以外的 TLS/SSL 端口,您可以使用宏指定它{$CERT.WEBSITE.PORT};
  9. 保存设置。

现在,当站点的证书即将过期时,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 证书需要尽快续订,您可以启用电子邮件或消息通知。