SSL 证书过期巡检脚本

这篇具有很好参考价值的文章主要介绍了SSL 证书过期巡检脚本。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

哈喽大家好,我是咸鱼

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

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

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

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

思路

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

#domain.txt
#域名:ip 池
www.baidu.com:180.101.50.242,180.101.50.188
www.bing.com:202.89.233.101,202.89.233.100

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

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

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')
	...
done

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

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')
	
	# 遍历 ip 池
    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 -subject)
    done
done

我们着重看下检测命令

echo | openssl s_client -servername ${domain} -connect ${ip}:443 2>/dev/null | openssl x509 -noout -dates -subject
  1. echo: 这个命令用于向标准输出打印一个空行
  2. openssl s_client -servername www.baidu.com -connect 180.101.50.242:443: 这部分命令使用 openssl 工具来建立一个与指定网站的 SSL 连接。 -servername选项指定了要连接的服务器的主机名-connect 选项指定了服务器的 IP 地址和端口号)
  3. 2>/dev/null: 这部分是重定向,将标准错误输出重定向到 /dev/null 设备文件,这样连接服务器的时候如果报错错误信息就不会显示在终端上
  4. openssl x509 -noout -dates: 这部分命令用于提取 SSL 证书的有效期和主题信息。openssl x509是用于处理 X.509 证书的命令,-noout 选项表示不打印证书本身,而是打印其他信息,-dates 选项表示打印证书的有效期

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

# echo | openssl s_client -servername www.baidu.com -connect 180.101.50.242:443 2>/dev/null | openssl x509 -noout -dates
notBefore=Jul  6 01:51:06 2023 GMT
notAfter=Aug  6 01:51:05 2024 GMT

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

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

if [[ ${text} ]] # text 里面有内容,不为空
then
	do something
fi

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

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

我们来看下执行结果:

  • 证书未过期情况
    SSL 证书过期巡检脚本

  • 证书快过期
    SSL 证书过期巡检脚本

  • 证书已过期
    SSL 证书过期巡检脚本文章来源地址https://www.toymoban.com/news/detail-605310.html

完整脚本

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

到了这里,关于SSL 证书过期巡检脚本的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 安装完SSL证书之后会过期吗?

    在建立安全的互联网连接时, SSL证书 被广泛应用于加密数据传输,保护用户隐私和敏感信息的安全。然而,SSL证书并不是永久有效的,它们都有一个特定的有效期。本文将详细介绍SSL证书的有效期,解释为什么它们会过期以及如何管理证书更新,以确保持续的安全保护。

    2024年02月10日
    浏览(33)
  • 阿里云ssl免费数字证书快过期 如何更换

    数字证书管理服务-ssl证书 此处记录本地的下载路径 /Users/dorsey/Downloads/10791167_lzzabc.cn_nginx/lzzabc.cn.pem  /Users/dorsey/Downloads/10791167_lzzabc.cn_nginx/lzzabc.cn.key 找到ssl存放位置    /www/https/lzzabc.cn.pem  /www/https/lzzabc.cn.key  mv admin.lzzabc.cn.pem admin2.lzzabc.cn.pem 命令为  scp 本地用户名@IP地址

    2024年02月14日
    浏览(39)
  • https 的ssl证书过期处理解决方案(lighthttpd)

    更换证书:lighthttpd 配置文件位置:/opt/vmware/etc/lighttpd/lighttpd.conf     (配置文件的最底部   G快速来到底部) 方案一:阿里云申请免费的证书 这里公司内网环境没有配置域名,可以创建一个临时域名(vim /etc/hosts )域名:www.zyg.com  这里先声明:思路是错误的 其下有错误

    2024年02月11日
    浏览(41)
  • 【Github】自动监测 SSL 证书过期的轻量级监控方案 - Domain Admin

    在现代的企业网络中,网站安全和可靠性是至关重要的。一个不注意的SSL证书过期可能导致网站出现问题,给公司业务带来严重的影响。针对这个问题,手动检测每个域名和机器的证书状态需要花费大量的时间和精力。为了解决这个问题,我想向大家介绍一个自动监测SSL证书

    2024年02月15日
    浏览(35)
  • python脚本监听域名证书过期时间,并将通知消息到钉钉

    版本一: 执行脚本带上 --dingtalk-webhook和–domains后指定钉钉token和域名 脚本如下 版本二 执行脚本带上 --dingtalk-webhook、–secret和–domains后指定钉钉token、密钥和域名 终极版本 python执行脚本时指定配置文件 config.json配置文件内容如下 脚本内容如下 执行结果 钉钉告警消息如下

    2024年02月06日
    浏览(35)
  • Docker部署开源密码管理器Bitwarden, 并申请免费ssl证书自动刷新永不过期

    GitHub传送阵 由于我的安全习惯,我基本上不会在不同的应用程序上使用相同的密码。这使我需要在备忘录上记录大量的账号密码,每次登录系统时需要检索备忘录,这很麻烦。虽然Chrome的密码管理器也可以使用,但是其功能过于简单,无法记录其他非Web系统的账号。 最近加

    2024年02月06日
    浏览(50)
  • curl请求https证书过期的问题:SSL certificate problem: certificate has expired

    写了两个系统,系统A使用 curl 去请求系统B,但是不知道为什么会报错 SSL certificate problem: certificate has expired 系统A使用了 https 但是系统B没有使用 https 系统A的SSL并未过期,而且在两个系统在同一台服务器时并未报错,所以不是SSL证书的问题 解决办法: 关闭curl对证书验证,可

    2024年02月16日
    浏览(48)
  • 微信小程序控制台 报错 对应的服务器证书无效 控制台输入 showRequestInfo() 可以获取更详细信息 原因是ssl证书过期 重新申请即可

    微信小程序控制台 报错 对应的服务器证书无效。控制台输入 showRequestInfo() 可以获取更详细信息 报错原因:域名下的SSL证书过期 我这边报错的原因是ssl证书过期 重新申请后就好了,但也有本身域名申请的就有问题的,重新根据规范去申请域名 解决方式:重新申请SSL证书 如

    2024年02月12日
    浏览(49)
  • ssl证书到期监控脚本,通过企业微信提前一个月通知提醒

            以下是一个简单的SSL证书到期监控脚本,它可以检查指定域名的SSL证书是否将在一个月内到期,并通过企业微信应用程序发送通知。该脚本使用 openssl 命令检查证书到期日期,并使用 curl 命令发送企业微信应用程序消息。          在这个脚本中,您需要将以下

    2024年02月16日
    浏览(53)
  • SQLServer证书过期,重做证书

    (1)查询证书相关信息 SELECT * FROM sys.certificates 查看证书 SELECT * FROM sys.endpoints 查看端点 SELECT * FROM sys.syslogins 查看登录 SELECT * FROM sys.sysusers 查看用户 (2)删除可用性组 (3)删除端点 DROP ENDPOINT Hadr_endpoint (4)删除证书 DROP CERTIFICATE sqlserver_1_certificate DROP CERTIFICATE sqlserver_

    2024年02月07日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包