SSL 证书过期巡检脚本

news2024/11/29 0:43:28

哈喽大家好,我是咸鱼

我们知道 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

我们来看下执行结果:

  • 证书未过期情况

在这里插入图片描述

  • 证书快过期
    在这里插入图片描述

  • 证书已过期
    在这里插入图片描述

完整脚本

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/793132.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

openlayers根据下拉框选项在地图上显示图标

这里是关于一个根据下拉框的选项在地图上显示图标的需求,用的是vueopenlayers 显示效果大概是这样: 选中选项之后会跳转到所点击的城市,并且在地图上显示图标温度,这一块UI没设计我就大概先弄了一下,比较丑。。 首先…

【JAVA】 String 方法附件

个人主页:【😊个人主页】 系列专栏:【❤️初识JAVA】 文章目录 String 方法 String 方法 char charAt(int index)返回指定索引处的 char 值。int compareTo(Object o) 把这个字符串和另一个对象比较。 int compareTo(String anotherString)按…

如何才能做Cox呢?今天带来Cox回归分析步骤详解

Cox回归是生存分析中运用最多的一个模型,又称为比例风险回归模型(proportional hazards model)。是由英国统计学家D.R.Cox在1962年提出的,为了表示对他的尊敬,所以大家以他的名字命名这个模型。这是一种半参数回归模型,以结局和生…

linux | vscode | makefile | c++编译和调试

简单介绍环境: vscode 、centos、 gcc、g、makefile 简单来说就是,写好项目然后再自己写makefile脚本实现编译。所以看这篇博客的用户需要了解gcc编译的一些常用命令以及makefile语法。在网上看了很多教程,以及官网也看了很多次,最…

Kakfa 入门到起飞 - Kafka 遭大家诟病了?因为啥?啥是再平衡?

Kafka 遭大家诟病了?因为啥?啥是再平衡? 再均衡是Kafka被大家诟病最多的一个点,再平衡是非常麻烦的一个事,那么就让我们来看看 到底什么是再平衡呢? 再平衡其实就是一个 协议,它规定了消费者…

0成本搭建自己的云数据库

第一步,租免费的云服务器 www.aliyun.com 阿里云的,可以免费租三个月 进入主页后选择云服务器ESC 选择这款,点击试用就行 第二步,配置服务器 在配置服务器系统的时候选择centos,省事,别选ubuntu&#x…

Windows 不同方式打开的cmd/dos窗口属性配置不同

文章目录 1. 默认值(控制台窗口)属性2. "C:\Windows\System32\cmd.exe" 属性3. "命令提示符"属性4. 自定义某标题cmd窗口属性5. cmd快捷方式的属性总结 最近在写某个批处理脚本时,意外发现 Windows系统中,在不…

Is Mapping Necessary for Realistic PointGoal Navigation 论文阅读和代码分析

论文 论文信息 题目:Is Mapping Necessary for Realistic PointGoal Navigation? 作者:Ruslan Partsey、 Erik Wijmans 代码地址:rpartsey.github.io/pointgoalnav 来源:CVPR Abstract 目标:证明显式地图不是成功…

工信部、国家标准委联合印发《国家车联网产业指南(2023 版)》

国家工信部和标委发布了最新的《国家车联网产业标准体系建设指南(智能网联汽车)(2023 版)》,了解这篇文章,不论您是智能网联汽车的追随者,还是对智能网联汽车产业前景感兴趣的人,都非…

力扣热门100题之除自身意外数组的成绩【中等】

题目描述 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请不要使用除法,且在 O(n)…

Oracle 迁移 Hive 过程中遇到的问题总结

前言 最近一个小伙伴在做从 Oracle 到 Hive 的业务迁移工作,在迁移过程中属实遇到了一些坑,今天就来汇总一下这些坑,避免以后大家其他业务迁移的时候再出现类似的问题,即使出现了也可以拿过来进行对照解决。 问题1:Distinct window functions are not supported: count(…

matlab二维图形的绘制(1)

概述 matlab数学计算中有时候需要将函数通过图形更加直观的展示给用户的时候就需要使用到二维绘图。绘图常常采用的绘图命令便是 plot ,再添加一些辅助命令使得图形更加的形象直观。 二维绘图中也包括针状图,阶梯图,散点图,条形图…

Emacs之实现跨程序选中自动复制功能(一百一十八)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

阿里云服务器配置 内存,cpu等等

实例升配,https://help.aliyun.com/document_detail/25438.html?spma2c4g.11174283.6.780.2cbf4c070oeino#title-a5t-gg2-

分布式文件存储与数据缓存 Redis高可用分布式实践(上)

一、Reids概述 1.1 为什么要使用NoSQL 单机Mysql的美好年代 在90年代,一个网站的访问量一般都不大,用单个数据库完全可以轻松应付。在那个时候,更多的都是静态网页,动态交互类型的网站不多。 遇到问题: 随着用户数的…

异构线程池的c++实现方案

概要 通常线程池是同质的,每个线程都可以执行任意的task(每个线程中的task顺序执行),如下图所示: 但本文所介绍的线程和task之间有绑定关系,如A task只能跑在A thread上(因此称为异构线程池&am…

《脱离“一支笔、一双手、一道力扣”困境的秘诀》:突破LeetCode难题的五个关键步骤

导言: 在解决LeetCode等编程题时,不少人会陷入“一支笔、一双手、一道力扣(LeetCode)做一宿”的困境。尽管已经掌握了相关知识和算法,但在实际挑战中却无从下手。本文将分享如何摆脱这一困境的秘诀,让你在面…

Java带符号右移(>>)、不带符号右移(>>>)

Java的右移涉及带符号右移(>>)、不带符号右移(>>>)。 对于正数,因为符号位是0,带符号右移和不带符号右移左侧都用0填充,所以结果相同。 对于负数,因为符号位是1&…

python + requests实现的电商API接口自动化框架详细教程

1、首先,我们先来理一下思路。 正常的电商接口测试流程是什么? 脑海里的反应是不是这样的: 确定测试接口的工具 —> 配置需要的接口参数 —> 进行测试 —> 检查测试结果(有的需要数据库辅助) —> 生成测…

第一节:我用Python论证移动平均线(MA)真的靠谱吗?

视频地址:点我查看文章配套视频 什么是MA 所谓“移动平均线”是指一段时间内股票价格的算术平均线,通常以收盘价作为计算值。它是一种趋向类技术指标。 在证券投资中,要赚钱无非是降低成本、提高收入,以期获得较高利润&#xff0…