定期检查某个SSL证书的有效期并告警

  1. 一、缘由
  2. 二、脚本

一、缘由

由于历史原因,我司SSL证书分散在不同的云服务器上,更换证书的时候可能会有遗漏。故将分散的SSL证书记录在文件里,定期用脚本检查剩余有效期天数,并告警。可以防止更换遗漏的事情发生。

二、脚本

  • 记录ssl证书所在服务器的位置
/root/ops_scripts/ip_ssl_path.txt

10.10.10.1#/usr/local/nginx/conf/cert/didikaihei.com.pem
10.10.10.2#/usr/local/nginx/conf/vhost/cert/zuhaowan.com.cn.pem
  • 设置Crontab定时任务执行脚本,并发送微信告警
#!/bin/bash

export LC_ALL=C
error_ips=""

notify(){
   curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=5b37f5cc-d1ed-48d4-a4b4-7d4f8a9da478' \
   -H 'Content-Type: application/json' \
   -d '
   {
        "msgtype": "text",
        "text": {
            "content": "SSL证书有效期小于30天的IP列表(非Proxy机器):\n'$1'",
            "mentioned_mobile_list":["@all",]
        }
   }'
}

for line in `cat /root/ops_scripts/ip_ssl_path.txt`
do
        echo "================================"
        ip=$(echo $line|awk -F"#" '{print $1}')
        ssl_path=$(echo $line|awk -F"#" '{print $2}')
        echo $ip
        end_time=$(ssh $ip "openssl x509 -in $ssl_path -noout -enddate |awk -F '=' '{print \$2}'")
        end_times=`date -d "$end_time" +%s `
        current_times=`date -d "$(date -u '+%b %d %T %Y GMT') " +%s `

        let left_time=$end_times-$current_times
        days=`expr $left_time / 86400`
        echo "剩余天数: " $days
        [ $days -lt 31 ] && echo "https 证书有效期少于30天,存在风险" && error_ips="$error_ips#$ip" 

done

echo -e "准备过期的域名为: \n  $error_ips"

if [ "$error_ips" = "" ]
then
        echo "不包含准备过期的域名"
else
        notify $error_ips
        echo "包含准备过期的域名" 
fi

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 lxwno.1@163.com

×

喜欢就点赞,疼爱就打赏