shell 获取域名证书的过期时间

SSL 证书是有过期时间的,以前有介绍过 Let’s Encrypt,Let’s Encrypt 证书过期时间是90天,这篇文章记录我的证书过期时间检测脚本。

首先有一个文件记录域名信息 :

# domain_list.md

blog.kelu.org:443
cdn.kelu.org:443

然后同级目录下读取文件进行监控:

#!/bin/bash
script_dir=$( cd "$( dirname "$0"  )" && pwd )

readFile="${script_dir}/domain_list.md"
grep -v '^#' ${readFile} | while read line;do # 读取存储了需要监测的域名的文件
    domain=$(echo "${line}" | awk -F ':' '{print $1}')
    domain_port=$(echo "${line}" | awk -F ':' '{print $2}')

    # 使用openssl获取域名的证书情况,然后获取其中的到期时间
    END_TIME=$(echo | openssl s_client -servername ${domain}  -connect ${domain}:${domain_port} 2>/dev/null | openssl x509 -noout -dates |grep 'After'| awk -F '=' '{print $2}'| awk -F ' +' '{print $1,$2,$4 }' )
    END_TIME1=$(date +%s -d "$END_TIME") # 将日期转化为时间戳
    NOW_TIME=$(date +%s -d "$(date | awk -F ' +'  '{print $2,$3,$6}')") # 将当前的日期也转化为时间戳

    RST=$(($(($END_TIME1-$NOW_TIME))/(60*60*24))) # 到期时间减去目前时间再转化为天数

    echo "${RST}天 : ${domain}"

    if [ $RST -lt 30 ]; then
      # 一些告警的逻辑。。。
      /usr/bin/kelumail "${domain} 证书即将到期" "剩余${RST}天"
    fi
done

参考资料


curl 自定义域名解析,根据 HTTP 状态码判断网站是否正常 删除华为云服务器自带的探针