{{item}}
{{item.title}}
{{items.productName}}
{{items.price}}/年
{{item.title}}
部警SSL证书可实现网站HTTPS加密保护及身份的可信认证,防止传输数据的泄露或算改,提高网站可信度和品牌形象,利于SEO排名,为企业带来更多访问量,这也是网络安全法及PCI合规性的必备要求
前往SSL证书Zabbix 作为企业级开源监控系统,通过自定义监控项与灵活的告警规则,可实现SSL证书全生命周期的自动化监控。本文将从技术原理出发,结合实战案例,详细介绍 Zabbix 如何监控SSL证书有效期、加密套件安全性、协议版本合规性等核心指标,为安全运维提供完整解决方案。
SSL证书安全配置监控需覆盖 “可用性、安全性、合规性” 三大维度,核心场景包括:
Zabbix 监控SSL证书的核心逻辑是 “通过脚本采集指标→自定义监控项接收数据→应用集归类指标→模板复用配置”,以下是详细实现步骤。
需开发 Shell/Python 脚本,通过 OpenSSL 工具获取SSL证书相关信息,输出 Zabbix 可识别的键值对格式。以下是核心脚本示例(以 Shell 脚本为例,兼容 Linux 服务器):
(1)SSL证书基础信息采集脚本(ssl_cert_check.sh)
#!/bin/bash
# 功能:采集SSL证书有效期、域名、签名算法等基础指标
# 参数:$1=域名 $2=端口(默认443)
DOMAIN=$1
PORT=${2:-443}
TMP_FILE=/tmp/ssl_cert_${DOMAIN}_${PORT}.pem
# 下载证书到临时文件(超时10秒)
openssl s_client -connect ${DOMAIN}:${PORT} -servername ${DOMAIN} -showcerts >/dev/null | openssl x509 -outform PEM -out ${TMP_FILE} -in /dev/stdin
if [ ! -f ${TMP_FILE} ]; then
echo "ERROR: 无法获取证书"
exit 1
fi
# 1. 证书剩余天数
EXPIRY_DATE=$(openssl x509 -in ${TMP_FILE} -noout -enddate | cut -d= -f2)
EXPIRY_TIMESTAMP=$(date -d "${EXPIRY_DATE}" +%s)
CURRENT_TIMESTAMP=$(date +%s)
REMAIN_DAYS=$(( (EXPIRY_TIMESTAMP - CURRENT_TIMESTAMP) / 86400 ))
# 2. 签名算法
SIGN_ALG=$(openssl x509 -in ${TMP_FILE} -noout -signaturealg)
# 3. 主体域名(Subject)
SUBJECT=$(openssl x509 -in ${TMP_FILE} -noout -subject | sed -n 's/^.*CN=//p')
# 4. 证书链长度(简化判断完整性)
CHAIN_LENGTH=$(openssl s_client -connect ${DOMAIN}:${PORT} -servername ${DOMAIN} -showcerts /null 2>/dev/null | grep -c "BEGIN CERTIFICATE")
# 输出Zabbix键值对(key:value)
echo "ssl.cert.remain_days ${REMAIN_DAYS}"
echo "ssl.cert.sign_alg ${SIGN_ALG}"
echo "ssl.cert.subject ${SUBJECT}"
echo "ssl.cert.chain_length ${CHAIN_LENGTH}"
# 清理临时文件
rm -f ${TMP_FILE}(2)SSL 安全配置采集脚本(ssl_security_check.sh)
#!/bin/bash
# 功能:采集TLS协议版本、加密套件等安全指标
# 参数:$1=域名 $2=端口(默认443)
DOMAIN=$1
PORT=${2:-443}
# 1. 支持的TLS协议版本(仅保留TLS 1.0及以上,排除SSLv2/SSLv3)
SUPPORTED_PROTOCOLS=$(openssl s_client -connect ${DOMAIN}:${PORT} -servername ${DOMAIN} -tls1 2>&1 | grep -q "Protocol : TLSv1" && echo "TLSv1,"; \
openssl s_client -connect ${DOMAIN}:${PORT} -servername ${DOMAIN} -tls1_1 </dev/null 2>&1 | grep -q "Protocol : TLSv1.1" && echo "TLSv1.1,"; \
openssl s_client -connect ${DOMAIN}:${PORT} -servername ${DOMAIN} -tls1_2 </dev/null 2>&1 | grep -q "Protocol : TLSv1.2" && echo "TLSv1.2,"; \
openssl s_client -connect ${DOMAIN}:${PORT} -servername ${DOMAIN} -tls1_3 </dev/null 2>&1 | grep -q "Protocol : TLSv1.3" && echo "TLSv1.3,")
# 去除末尾逗号
SUPPORTED_PROTOCOLS=${SUPPORTED_PROTOCOLS%,}
# 2. 弱加密套件检测(判断是否包含RC4/3DES/MD5)
WEAK_CIPHERS=$(openssl s_client -connect ${DOMAIN}:${PORT} -servername ${DOMAIN} -cipher "RC4:3DES:MD5" 2>&1 | grep -c "Cipher :")
# 3. SSL握手延迟(单位:毫秒)
HANDSHAKE_DELAY=$(time -p openssl s_client -connect ${DOMAIN}:${PORT} -servername ${DOMAIN} 2>/dev/null | grep real | awk '{print $2*1000}' | cut -d. -f1)
# 输出Zabbix键值对
echo "ssl.security.supported_protocols ${SUPPORTED_PROTOCOLS}"
echo "ssl.security.weak_ciphers ${WEAK_CIPHERS}"
echo "ssl.security.handshake_delay ${HANDSHAKE_DELAY}"修改 Zabbix Agent 配置文件(/etc/zabbix/zabbix_agentd.conf),添加自定义监控项键值,让 Zabbix Agent 能够调用脚本采集数据:
#SSL证书基础监控(键值格式:UserParameter=自定义键名,脚本路径 $1 $2)
UserParameter=ssl.cert.basic[*],/etc/zabbix/scripts/ssl_cert_check.sh $1 $2
# SSL安全配置监控
UserParameter=ssl.security.check[*],/etc/zabbix/scripts/ssl_security_check.sh $1 $2配置完成后,重启 Zabbix Agent 使配置生效:
# CentOS/RHEL
systemctl restart zabbix-agent
# Ubuntu/Debian
systemctl restart zabbix-agent2(1)测试监控项可用性
在 Zabbix Server 端执行以下命令,验证是否能正常获取指标(需替换为实际域名和端口):
# 测试基础指标采集
zabbix_get -s 客户端IP -k ssl.cert.basic[www.example.com,443]
# 测试安全指标采集
zabbix_get -s 客户端IP -k ssl.security.check[www.example.com,443]若输出类似ssl.cert.remain_days 68的键值对,说明脚本与 Agent 配置正常。
(2)创建自定义监控项
1)登录 Zabbix Web 界面,进入「配置」→「主机」→ 目标主机 →「监控项」→「创建监控项」;
2)按指标类型配置监控项,核心参数如下(以 “证书剩余天数” 为例):
3)重复上述步骤,创建其他监控项(如签名算法、支持的 TLS 协议版本、弱加密套件数等),并归类到 “SSL证书监控” 应用集。
为避免重复创建监控项,可将SSL证书相关监控项、触发器、图形打包为模板,后续只需将模板链接到目标主机即可:
触发器是 Zabbix 告警的核心,需根据前文定义的安全阈值,设置合理的触发条件(以 Zabbix 表达式语法编写)。以下是核心触发器示例:
配置技巧:
Zabbix 支持邮件、短信、企业微信、Slack 等多种告警媒介,以企业微信为例配置步骤:
动作定义了告警触发后 Zabbix 的执行逻辑,包括通知接收人、通知频率、恢复通知等:
(1)进入「配置」→「动作」→「创建动作」,命名为 “SSL证书告警动作”;
(2)触发条件:选择 “触发器 =SSL证书相关触发器”(可通过应用集筛选);
(3)操作:
(4)恢复操作:配置告警恢复时的通知(如 “【SSL证书告警恢复】主机:{HOST.NAME},告警项:{ITEM.NAME},当前值:{ITEM.VALUE},已恢复正常”)。
创建SSL证书监控图形,将关键指标(如剩余天数、握手延迟)的趋势可视化:
通过 Zabbix 仪表盘,整合所有SSL证书监控数据,实现全局可视化:
(1)进入「监测」→「仪表盘」→「创建仪表盘」,命名为 “SSL证书安全监控中心”;
(2)添加组件:
(3)权限配置:授予运维组 “只读” 权限,方便团队成员查看。
Zabbix 支持自动生成SSL证书监控报表,用于安全合规审计:
解决方案:①检查脚本权限(chown zabbix:zabbix);②测试客户端到域名的端口连通性(telnet www.example.com 443);③安装 OpenSSL;
解决方案:①同步所有主机时间(NTP 服务);②修改脚本中时间戳计算逻辑,使用 UTC 时间;
解决方案:扩展脚本中的弱加密套件列表(如添加 AES-128-CBC 等不安全套件);
解决方案:①调整阈值(如证书剩余天数预警阈值从 30 天改为 15 天);②延长更新间隔(如从 1 小时改为 2 小时);③启用 “触发次数” 过滤。
当监控的SSL证书数量较多(如 100 + 域名)时,需进行性能优化,避免 Zabbix Server 压力过大:
对于需要监控多个域名的场景,可通过 Zabbix 宏变量实现批量配置:
通过 Zabbix 与自动化工具(如 Ansible、Jenkins)联动,实现证书过期前自动更新:
针对 PCI DSS、等保 2.0 等合规要求,扩展监控项与触发器:
SSL证书安全配置监控是企业安全运维的重要组成部分,Zabbix 通过自定义监控项、灵活的告警规则与可视化能力,实现了从指标采集到告警响应的全流程自动化。本文介绍的方案不仅能避免证书过期导致的业务中断,还能及时发现弱加密、不安全协议等安全风险,为 HTTPS 服务的稳定与安全提供核心保障。
Dogssl.com拥有20年网络安全服务经验,提供构涵盖国际CA机构Sectigo、Digicert、GeoTrust、GlobalSign,以及国内CA机构CFCA、沃通、vTrus、上海CA等数十个SSL证书品牌。全程技术支持及免费部署服务,如您有SSL证书需求,欢迎联系!