聊聊 SSL 证书过期巡检脚本

安全 应用安全
如果公司业务体量较大的话,肯定不止一个域名,而一个域名后面又会对应着多台机器,如果我们手动输入命令一台台检测的话,所需要的精力和时间是很大的

哈喽大家好,我是咸鱼。

我们知道 SSL 证书是会过期的,一旦过期之后需要重新申请。如果没有及时更换证书的话,就有可能导致网站出问题,给公司业务带来一定的影响。

所以说我们要每隔一定时间去检查网站上的 SSL 证书是否过期。

如果公司业务体量较大的话,肯定不止一个域名,而一个域名后面又会对应着多台机器,如果我们手动输入命令一台台检测的话,所需要的精力和时间是很大的。

那么今天咸鱼跟大家介绍一个自己平常在用的自动检测 SSL 过期时间的 shell 脚本。

思路

前面我们说到,一个公司(一个业务)底下可能会有多个域名多个 IP 地址,所以说我们需要整理出来放到一个文件里面,如下所示:

图片图片

整理出来之后,后面只需要循环遍历 domain.txt 中的每一行内容,然后把域名和 ip 地址分别提取出来一个一个去检测就行了。

首先我们对 domain.txt 中的内容进行循环遍历,提取出域名和 ip 池。

图片图片

然后再遍历 ip 池,取出每一个 ip 地址,然后执行检测命令,把检测到的结果存进 text 变量里。

图片图片

我们着重看下检测命令:

图片图片

图片图片

输出信息如下(即 text 变量内容):

图片图片

其中 notBefore 是开始时间,notAfter 是过期时间。

需要注意的是,如果提取不到 SSL 证书的信息,那么  text  里面是没有内容的,所以在检测过期时间之前我们需要判断一下。

图片图片

然后我们提取出输出的 SSL 证书信息中 notAfter  的值,然后转换成时间戳的形式,并且求出当前的时间戳。

图片图片

最后我们用过期时间减去当前时间,得出剩余时间,再对剩余时间做判断。

图片图片

我们来看下执行结果:

  • 证书未过期

图片

  • 证书快过期

图片

  • 证书已过期

图片

完整脚本

for line in $(cat domain.txt)
do
        domain=$(echo ${line} | awk -F':' '{print $1}')
        ip_pool=$(echo ${line} | awk -F '[a-z]:' '{print $2}' | sed 's/\,/ /g')
        for ip in ${ip_pool}
        do
                echo -e "\e[33m---------------start to check---------------\e[0m"
                echo -e "ip:${ip}\ndomain:${domain}"


                text=$(echo | openssl s_client -servername ${domain} -connect ${ip}:443 2>/dev/null | openssl x509 -noout -dates )
                # 判断命令是否执行成功,执行成功的话 text 变量里面是有内容的
                if [[ ${text} ]] 
                then
                    end_date=$(echo "$text" | grep -i "notAfter" | awk -F '=' '{print $2}') # 证书过期时间
                    end_timestamp=$(date -d "$end_date" +%s) # 转换成时间戳


                    current_timestamp=$(date +%s) # 当前时间戳


                    # 如果证书过期时间减去当前时间的天数小于七天的话,则提示需要准备更换证书了
                    remain_date=$(( (${end_timestamp} - ${current_timestamp}) / 86400 ))
                    if [[ ${remain_date} -lt 7 && ${remain_date} -ge 0 ]]
                    then
                        echo -e "\e[31m剩余时间小于七天!请及时更换证书!\e[0m"
                        echo -e "\e[31mip: ${ip}, ${domain}\e[0m"
                    elif [[ ${remain_date} -lt 0 ]]
                    then
                        echo -e "\e[31m证书已过期!请及时更换证书!\e[0m"
                    else
                        echo -e "\e[32m剩余天数为:${remain_date}\e[0m"
                    fi
                else
                            echo -e "\e[31mError!${ip}\e[0m"
                            echo -e "\e[31m${domain}\e[0m"
                fi
        done
done


责任编辑:武晓燕 来源: 咸鱼运维杂谈
相关推荐

2021-05-25 11:13:48

SSL证书过期微软Microsoft E

2021-11-22 10:40:35

Linux脚本内存

2009-08-14 13:34:21

SSL证书 EV SSL在线交易

2010-12-02 10:05:24

2009-08-14 15:12:37

SSL证书安全案例

2013-08-29 09:51:33

SSL证书SSL证书管理

2020-12-31 08:08:23

SSL证书企业

2020-06-22 07:51:24

SSL证书数据安全数据泄露

2021-06-18 09:41:55

SSL证书数据安全数据泄露

2021-09-03 05:01:02

开源巡检脚本

2009-10-28 10:20:10

2009-08-26 22:21:12

2009-08-14 15:00:47

SSL证书 天威诚信VeriSign证书

2009-08-14 13:27:43

2016-10-18 10:23:14

Docker容器SSL证书

2022-11-18 08:45:43

Linux

2009-08-25 08:59:17

SSL证书网安全产品天威诚信

2009-08-14 15:05:33

2009-08-27 17:23:57

SSL证书网站安全

2009-08-27 08:51:37

EV SSL证书
点赞
收藏

51CTO技术栈公众号