前提:

zabbix6 +网上资料

写这编文件的目的是让更多的人在查询了网上资料,还会遇上无法正常读取SSL证书到期时间的问题。所以在观看本文时,你需要有搭建ZABBIX6的基础,及Cenos8系统操作基础。

blackbox监控ssl证书 zabbix监控证书_https

  1. 检查你的系统是否支持openssl 检测
openssl s_client  -connect  www.baidu.com:443 2>/dev/null | openssl x509 -noout -dates

返回结果如下图,CTRL+C可结束退出来。

blackbox监控ssl证书 zabbix监控证书_blackbox监控ssl证书_02

 如果遇上无法使用openssl请自行查阅资料安装相关插件。

  1. vi /usr/lib/zabbix/externalscripts/ssl_check_port.sh  #这个文件我是创建到zabbix脚本目录/usr/lib/zabbix/externalscripts ,请也可cd到指定的目录后在创建。
#!/bin/bash
#获取ssl证书的过期时间
#author:Allen
#获取证书的有效时间
weburl=$1
sslprot=$2
ssltls=$3  #启用可引入1,1_1,1_2等协议版本,可解决低版服务器检测不到ssl证书时用
time=$(echo | openssl s_client  -connect  ${weburl}:${sslprot} -tls${ssltls} 2>/dev/null | openssl x509 -noout -dates |awk -F'=' 'NR==2{print $2}')
#有效时间生成时间戳
time1=$(date +%s -d "$time")
#当前时间生成时间戳
time2=$(date +%s)
#当前时间减去有效时间,获得将要过期的天数
time3=$(((time1-time2)/(60*60*24)))
echo $time3

代码上网上拷的,上网大概有三种版本。测试了下都可以用,特别是默认是检测443端口的。但我的情况比较特殊,所以我自己改了下这样可以自定义SSL端口

  1. chmod +x ssl_check_port.sh  给文件加执行权限,否则zabbix监控项无法正常
  2. vi /etc/zabbix/zabbix_agentd.d/userparameter_key.conf  添加以下脚本到最后一条。重启zabbix代理服务后,此部分内容会被agent.conf引入。也就是agent会知道这个key怎么操作,key后面是之前定义的shell+参数。
UserParameter=ssl_check[*],/usr/lib/zabbix/externalscripts/ssl_check_port.sh $1 $2 $3

本文中自定义的KEY是ssl_check[]

  1. systemctl restart zabbix-agent
  2. 手动添加监控项

以上两个监控项,一条是默认检测443接口,用的TLS1.2;第二条是检测的8051端口的,用的是TLS1。 

  1. 手动检测结果
    读取到正常的数值就说明成功。 
  2. 总结。
错误代码:
unable to load certificate
139813418198848:error:0909006C:PEM routines:get_name:no start line:crypto/pem/pem_lib.c:745:Expecting: TRUSTED CERTIFICATE

当初使用网上的脚本,在一台windows 2008 IIS上面检查SSL证书。一直无法成功提示以上错误,经过多方面查找资料。发现是因为服务器SSL支持协议只能是TSL1,把通过修改脚本,以些来支持直接在zabbix监控项上面定义域名、端口号、协议版本信息,完美的解决了务类服务器检测证书时间到期问题。