zoukankan      html  css  js  c++  java
  • 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 "33[31m 您的$host 证书 还有${days}天到期  请谨慎处理 33[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  ——》貌似要翻墙才能打开

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

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

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

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

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

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

    (1)

    (2)

     

    (3)运行“Run Test”

     

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

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

     

  • 相关阅读:
    js流程控制语句
    js流程控制语句
    js流程控制语句
    js流程控制语句
    Nginx入门及如何反向代理解决生产环境跨域问题
    Nginx入门及如何反向代理解决生产环境跨域问题
    Nginx入门及如何反向代理解决生产环境跨域问题
    arcserver开发小结(三)
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
  • 原文地址:https://www.cnblogs.com/windysai/p/14337272.html
Copyright © 2011-2022 走看看