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
echo
: 这个命令用于向标准输出打印一个空行openssl s_client -servername www.baidu.com -connect 180.101.50.242:443
: 这部分命令使用openssl
工具来建立一个与指定网站的 SSL 连接。-servername
选项指定了要连接的服务器的主机名-connect
选项指定了服务器的 IP 地址和端口号)2>/dev/null
: 这部分是重定向,将标准错误输出重定向到/dev/null
设备文件,这样连接服务器的时候如果报错错误信息就不会显示在终端上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
我们来看下执行结果:
证书未过期情况
证书快过期
证书已过期
完整脚本
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 证书过期巡检脚本的更多相关文章
- Splunk < 6.3 版本 SSL 证书过期事宜
最近Splunk发出邮件提醒客户SSL证书过期事宜. 问题看起来比较严重,因为所有的实例,包括 forwarder\peernode\indexer\master node 等等都受影响,而且Depl ...
- zabbix监控ssl证书过期时间
获取证书过期时间脚本: /etc/zabbix/scripts/check-cert-expire.sh: #!/bin/bash host=$ port=$ end_date=`/usr/bin/o ...
- ssl证书过期问题
问题:linux服务器ssl证书过期,申请新证书后,也更换了服务器的证书,但是网页一直提示证书过期 解决:经分析后,发现服务器架构为waf->slb->esc,域名并未直接解析到slb,解 ...
- 阿里云ssl证书过期怎么解决 (免费SSL证书) 三步解决
阿里云ssl证书过期怎么解决(免费SSL证书),三步解决 使用免费的SSL证书网站 https://ohttps.com 1.注册帐号 2.申请证书 3.部署到阿里云 4.注意事项 1.注册帐号 到 ...
- ssl证书过期问题解决
1,ssl证书失效现象 小程序debug有如下证书无效信息: 浏览器访问https://ic-park.net:30001/indoornav/callFunction1.php 提示证书风险. 2, ...
- webSphere提示SSL证书过期,解决方法
1.点击Security ------SSL certificate and key management2.点击Related Items下的key stores and certificates3 ...
- 使用nagios监控ssl证书过期时间
1.编写监控脚本. # vim check_ssl_expiry.sh #!/bin/bash STATE_OK=0 STATE_WARNING=1 STATE_CRITICAL=2 Host=$1 ...
- 002_监测ssl证书过期时间
一. s_client This implements a generic SSL/TLS client which can establish a transparent connection to ...
- [linux tips] puppet client ssl 证书过期
问题: [root@control-01 .ssh]# puppet agent -tv Warning: Unable to fetch my node definition, but the ag ...
- 阿里云SSL证书到期(续期)图文教程
今天公司项目突然报错 后来查询是SSL证书过期了.友情提示: 证书产品仅支持新签发.不支持续费.证书到期前需在阿里云SSL证书控制台重新购买和申请证书. 登录阿里云控制台,点击产品与服务,在搜索框搜索 ...
随机推荐
- MySQL数据库的四大语言
DDL数据定义语言 DDL(Data Definition Languages) : 数据定义语言,用来定义数据库的对象(数据库,表,字段)建改库建改表 DDL代码演示 DML数据操作语言 DML(D ...
- mysql 安装避坑指南 ,mysql 安装后不能启动, mysql 指定版本安装,mysql 5.7.39版本安装,mysql 5.7.36版本安装
mysql 安装后不能启动,报错如下:请参照本说明第7条的办法解决.mysqld.service: Control process exited, code=exited status=1Please ...
- 【uniapp】【外包杯】学习笔记day04 | 学习模板+vue相关知识+环境搭建
没啥好说的,人与人的悲欢并不相同,我只觉得吵闹. 好烦啊,虽然不应该总说一些低气压的话,不过目前预见的就是有很多工作要做,并且对于完成的希望也有点没有,就这样吧,没啥好说的. 昨天做了python的作 ...
- CLion安装与配置教程
一.下载并安装CLion 1.下载 1.官网: Download CLion 2.注意: 这里建议使用2021.1.3版本之前,为之后的使用便利而做打算. (这里以Windows系统为例,其他系统类似 ...
- uni-app全局样式和局部样式
前言 好,经过上个章节的介绍完毕之后,了解了一下 UniApp 的一个全局 页面配置文件,也就是我们的一个 pages.json 文件. 那么了解完了这个文件之后,这片文章,再了解一下 UniApp ...
- 切换容器引擎为containerd
确保模块载入: # 永久生效 cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf overlay br_netfilter E ...
- storeToRefs()的作用和使用
store 是一个用 reactive 包装的对象,这意味着不需要在 getters 后面写 .value,就像 setup 中的 props 一样,如果你写了,我们也不能解构它: <scrip ...
- 数字孪生结合GIS系统为旅游行业带来的改变
随着数字孪生技术的不断发展和普及,越来越多的行业开始意识到其潜在的价值和应用前景.在旅游行业中,数字孪生结合GIS系统的应用正在逐渐引起关注,并带来了诸多改变和创新. 数字孪生是指通过将现实世界中的实 ...
- springboot产生非法状态异常+空指针
springboot产生非法状态异常+空指针 描述:异常描述为在响应提交后不能执行senderror方法 解决方案: 不是,哥们,你不会真觉得有什么合适的解决方案吧,网上几波前辈大佬各说各的,和我的情 ...
- Python汉诺塔递归算法实现
关于用递归实现的原理,请查看我之前的文章: C语言与汉诺塔 C#与汉诺塔 以下为代码: count = 0 def move(pile, src, tmp, dst): global count if ...