news 2026/4/6 1:31:00

运维必备:10行shell脚本解决ssl证书更换遗漏难题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
运维必备:10行shell脚本解决ssl证书更换遗漏难题

SSL证书有效期正在逐年缩短,今年3月15日之前购买有效期是1年,3月15日之后购买的有效期只有200天,2027年缩短到100天,最终2029年有效期会缩短到47天。

作为运维人员,如果你也像我一样,手里有好几百个使用https的域名,部署位置也不统一,每年换ssl证书都担心漏换,那今天送你一段shell脚本,仅10来行就能解决漏换问题。

这是一个检测证书有效期的脚本,前面先讲下脚本如何工作,如果不想看也可以直接跳到文末复制脚本运行即可。

1 通过openssl来读取证书信息

[root@vm ~]# openssl s_client -connect www.baidu.com:443 -servername www.baidu.com -showcerts </dev/null 2>/dev/null | openssl x509 -dates -nooutnotBefore=Jul 907:01:022025 GMTnotAfter=Aug 1007:01:012026 GMT

参数说明:

  • openssl s_client, OpenSSL 的客户端工具,用于建立 SSL连接

  • -connect www.baidu.com:443, 指定要连接的目标域名 + 端口

  • -servername www.baidu.com, 指定servername

  • -showcerts, 输出完整的证书链

  • </dev/null, 关闭标准输入不等待用户输入直接输出证书并退出

  • 2>/dev/null, 重定向错误输出到空(过滤连接过程中的警告 / 调试信息)

  • openssl x509, 管道传递证书内容,用 x509 工具解析

  • -dates, 仅输出证书的生效时间(notBefore)和过期时间(notAfter)

  • -noout, 不输出证书的原始编码内容,否则输出内容过多会乱

2 提取证书过期时间

grep "notAfter" | cut -d'=' -f 2

notAfter 这一行是证书的过期时间,通过grep取出这一行,通过cut命令指定分隔符为“=”,输出分割后的第二列,即过期时间 Aug 1007:01:012026 GMT

3 将获取的时间转换为unix时间戳

Unix 时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,这里转换成时间戳方便后续计算时间。

[root@vm ~]# date -d "Aug 10 07:01:01 2026 GMT" +%s1786345261
  • date -d 是 Linux 中用于显示指定日期或时间的命令。它允许用户通过字符串格式化来解析和显示特定的日期和时间。

  • +%s 将解析后的时间转换为 Unix 时间戳

4 完整代码

​​​​​​​​​​​​

#命令行执行sh ssl_check.sh domain.txt 2>/dev/null#sh ssl_check.sh domain.txt#DOMAIN="xx.yy.com" #域名#PORT=443 #端口#域名文件domain.txt格式xx.yy.com:443for i in `cat $1`;doDOMAIN=`echo$i|awk -F ':''{print $1}'`;PORT=`echo$i | awk -F ':''{print $2}'` ;# 获取SSL证书信息SSL_CERT_INFO=$(openssl s_client -connect ${DOMAIN}:${PORT} -servername ${DOMAIN} -showcerts </dev/null 2>/dev/null | openssl x509 -dates -noout)# 提取证书有效期结束时间CERT_END_DATE=$(echo"${SSL_CERT_INFO}" | grep "notAfter" | cut -d'=' -f 2)# 将时间转换为Unix时间戳方便后续计算剩余天数END_TIMESTAMP=$(date -d "${CERT_END_DATE}" +%s)#当前系统时间CURRENT_TIMESTAMP=$(date +%s)# 计算剩余天数CERT_DAYS_REMAINING=$(( (${END_TIMESTAMP} - ${CURRENT_TIMESTAMP}) / 86400 ))#echo $i $CERT_DAYS_REMAINING#正在检测时输出.....echo -n .#证书有效期小于20天且不等于0,等于0的可能是没有ssl证书if [ $CERT_DAYS_REMAINING -lt 20 ] && [ $CERT_DAYS_REMAINING -ne 0 ]; thenecho"${DOMAIN}${PORT} 剩余${CERT_DAYS_REMAINING}天"fidone

5 运行脚本

  1. 把脚本文件另存为ssl_check.sh

  2. 准备一份域名清单,准备一份域名清单domain.txt,每行一个域名:端口号,格式如xx.yy.com:443

  3. 把22行证书有效期改为300天后执行sh ssl_check.sh domain.txt 结果:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/27 14:08:50

Windows HEIC缩略图生成终极指南:告别苹果照片预览困境

Windows HEIC缩略图生成终极指南&#xff1a;告别苹果照片预览困境 【免费下载链接】windows-heic-thumbnails Enable Windows Explorer to display thumbnails for HEIC files 项目地址: https://gitcode.com/gh_mirrors/wi/windows-heic-thumbnails 还在为Windows系统…

作者头像 李华
网站建设 2026/4/3 3:27:14

批量处理神器:科哥图像抠图镜像提升工作效率

批量处理神器&#xff1a;科哥图像抠图镜像提升工作效率 1. 引言&#xff1a;为什么你需要一个高效的图像抠图工具&#xff1f; 你有没有遇到过这样的情况&#xff1a;手头有一堆商品图、人像照或者设计素材&#xff0c;全都需要去掉背景&#xff1f;如果靠PS手动抠图&#x…

作者头像 李华
网站建设 2026/4/2 7:04:19

Lucky Draw抽奖系统:企业级活动抽奖终极解决方案

Lucky Draw抽奖系统&#xff1a;企业级活动抽奖终极解决方案 【免费下载链接】lucky-draw 年会抽奖程序 项目地址: https://gitcode.com/gh_mirrors/lu/lucky-draw 还在为活动抽奖环节的技术实现而苦恼吗&#xff1f;Lucky Draw抽奖系统作为一款功能强大的开源项目&…

作者头像 李华
网站建设 2026/4/1 0:41:33

2024年3月GESP真题及题解(C++八级): 接竹竿

2024年3月GESP真题及题解(C八级): 接竹竿 题目描述 小杨同学想用卡牌玩一种叫做“接竹竿”的游戏。 游戏规则是&#xff1a;每张牌上有一个点数 v v v&#xff0c;将给定的牌依次放入一列牌的末端。若放入之前这列牌中已有与这张牌点数相 同的牌&#xff0c;则小杨同学会将这…

作者头像 李华
网站建设 2026/4/3 3:08:04

SSCMS 正式推出全新平台——献丑AI视频开源社区

作为国内领先的开源CMS厂商&#xff0c;SSCMS深耕内容管理领域多年。如今&#xff0c;我们从图文迈向视频&#xff0c;从内容管理延伸到内容创作&#xff0c;正式推出首个AI视频开源社区。在这里&#xff0c;你不仅能看到惊艳的AI视频作品&#xff0c;更能打开每一个作品的完整…

作者头像 李华
网站建设 2026/4/4 16:24:03

Agentic AI提示系统的分布式锁设计:架构师教你解决扩展时的数据一致性问题

Agentic AI提示系统的分布式锁设计:架构师教你解决扩展时的数据一致性问题 一、引入:当Agent开始“抢菜单”——一个真实的崩溃现场 凌晨3点,某电商平台的客服运营群突然炸了: “今天的自动回复全乱了!用户问‘退款流程’,Agent居然回复‘亲,记得给好评哦~’” “我明…

作者头像 李华