ssl证书过期监控

ssl证书过期监控

一、需求引入

  之前试过有个网站证书悄悄过期了,上一年不是过年过的特别早么,那个春节关服务的定时脚本竟然忘记关了!!!(幸好领导没有看到,除非往上翻监控信息,不然上班那会一般只会看到最新的数据库备份监控信息)

 

 

   这玩意实际上是nginx加载了停服务的虚拟配置文件,我就虚构了一个假的端口,proxy_pass 转过去。至于原端口nginx代理某个静态网目录是没有停的。当时吓坏了,把人家网站关了那么久耶(0点关到7点)。然后一早起来,我手动开起来了。但发现页面说是不安全的,除非点击继续访问(算了知道是证书过期,回公司再弄)。这关停的时间内竟然没有人发现,没有人投诉,不过有些事情不怕一万,只怕万一,如果是一个非常重要的网站,经常有人看的,证书过期了,作为运维的你竟然没发现,呵呵,你就等着写故障报告吧~~~是不是细思极恐,所以嘛,做运维就应该要有点前瞻性,不要等事情发生才懂得预防,毕竟,防患于未然会省去后续很多活的

 

二、需求实现

  有两个脚本都是用openssl去搞的(当然我是抄的,一个抄网上,一个抄前运维的,就改了点就能用了)

1、check_ssl.sh    ——》运行需要接参数,用来做单一域名测试不错

 1 #!/bin/bash
 2 
 3 # 检测https证书有效期
 4 if [ $# -ne 1 ]; then
 5    echo "请输入需要的检查域名: 例如 /check_ssl.sh www.baidu.com"
 6 else
 7    #参数设置为host
 8    host=$1
 9    #最后到期时间
10    #end_date=`echo |openssl s_client -servername $host  -connet $host:443 2nssl x509 -noout -dates|awk -F '=' '/notAfter/{print $2}'`
11     #最后到期时间转换为时间戳
12     end_data=`date +%s -d "$(echo |openssl s_client -servername $host  -connect $host:443 2>/dev/null | openssl x509 -noout -dates|awk -F '=' '/notAfter/{print $2}')"`
13     #当前时间戳
14     new_date=$(date +%s)
15     #计算SSL证书截止到现在的过期天数
16     #计算SSL正式到期时间和当前时间的差值
17     days=$(expr $(expr $end_data - $new_date) / 86400)
18     echo -e "\033[31m 您的$host 证书 还有${days}天到期  请谨慎处理 \033[0m"
19 fi

运行脚本: ./check_ssl.sh  检测域名

结果显示是这样的:

 

2、domain_ssl_new.sh ——》这脚本放到计划任务了

前运维写的,我就直接用了,为了尊重版权,加个后缀叫"new"。

要引入一个domain_ssl_new.txt ,填入你要检测的域名即可(注意:一行一个域名)

 1 #!/bin/bash
 2 
 3 #监控域名证书到期发送钉钉消息通知
 4 #作者:ljy
 5 #日期:2021/01/27
 6 #版本:v1.0
 7 
 8 PHONE="159xxxx0136"
 9 TOKEN="https://oapi.dingtalk.com/robot/send?access_token=xxx"
10 
11 dir="/home/用户/scripts/domain"
12 for yuming in `cat ${dir}/domain_ssl_new.txt` #读取存储了需要监控的域名文件
13 do
14     END_TIME=$(echo | openssl s_client -servername $yuming  -connect $yuming:443 2>/dev/null | openssl x509 -noout -dates |grep 'After'| awk -F '=' '{print $2}'| awk -F ' +' '{print $1,$2,$4 }')
15 
16     #使用openssl获取域名的证书情况,然后获取其中的到期时间
17     END_TIME1=$(date +%s -d "$END_TIME") #将日期转化为时间戳
18     NOW_TIME=$(date +%s -d "$(date | awk -F ' +'  '{print $2,$3,$6}')") #将目前的日期也转化为时间戳
19 
20     NEW_TIME=$(($(($END_TIME1-$NOW_TIME))/(60*60*24))) #到期时间减去目前时间再转化为天数
21 
22     if [ $NEW_TIME -lt 10 ];  #当到期时间小于10天时,发钉钉群告警
23     then
24         curl -H "Content-Type:application/json" -X POST --data '{"msgtype":"text","text":{"content":"域名:'$yuming'   ssl免费证书到期日期,剩余:'$NEW_TIME' 天"} , "at": {"atMobiles": ['${PHONE}'], "isAtAll": false}}' ${TOKEN} > /dev/null 2>&1
25     fi
26 done

 

 

 3、用工具搞:LetsMonitor  ——》貌似要FQ才能打开

提供免费ssl检测服务,在凭证需要需用或过期前发送提醒(仅限邮件发送,而且只能添加5个域名证书监控,不然要收费)

 

 

## 使用说明,我简单说下

1、注册之后,在Contacts上添加要发送的邮箱

 

2、然后打开“Monitors”,设置要监控的域名证书

3、做了个模拟证书过期的小测试,如下设置,然后运行“Run Test”,测试是否能成功发送提醒

测试证书实际过期时间为158天,我这里设置了还剩下160天报警。

(1)

 

 

(2)

 

(3)运行“Run Test”

 

(4)最后QQ邮箱就收到过期提示了

(据说只发一次,所以微信最好开一下QQ邮件提醒,相当于发到微信了)。这工具作为备用提醒还是可以滴,反正也是白嫖,哈哈哈哈~~~~

 

posted @ 2021-01-27 22:23  windysai  阅读(1545)  评论(2编辑  收藏  举报