当前位置: 首页 > news >正文

运维必备: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 结果:

http://www.jsqmd.com/news/280770/

相关文章:

  • 大语言模型的推理能力:未来发展方向
  • ImageGlass终极指南:免费开源图像查看器的5个核心优势
  • 轻量级大模型怎么用?gpt-oss-20b-WEBUI详细体验分享
  • 下一代编程助手:IQuest-Coder-V1技术架构深度解析
  • Open-AutoGLM云端API调用教程,免本地部署超省心
  • 西门子博途(TIA Portal)无法搜索不到PLC?怎么解决?
  • 异或 XOR 运算是什么?为什么对于大多数人,不重要?
  • 导师严选9个AI论文网站,专科生搞定毕业论文+格式规范!
  • springboot_ssm835面向学生成绩分析系统--论文
  • PyTorch-2.x-Universal-Dev-v1.0镜像数据处理能力全面评测
  • 吐血推荐专科生必用AI论文软件TOP10
  • 动手实操:YOLOv10官方镜像训练全过程分享
  • Java毕设选题推荐:基于springboot的医药配药管理系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • springboot_ssm836风俗文化管理系统--论文
  • 计算机Java毕设实战-基于springboot的医药药品管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • springboot_ssm837高校学生健康档案管理系统--论文
  • MinerU金融研报处理:图表与文字分离实战教程
  • 零基础玩转Qwen3-Embedding:4B模型保姆级部署教程
  • DALLE 2, Stable Diffusion和 Midjourney
  • 实用丨维普AIGC降AI工具推荐 + 操作顺序
  • springboot_ssm841智慧餐厅点餐管理系统ssm三个角色 员工
  • 真的服!这AI赋能的智慧康养,让长辈安心、家人省心到哭!
  • 【C#程序员入门AI】2026年必知的AI生态与技术路线图
  • 计算机网络经典问题透视:数据流的平均速率,峰值速率和突发长度各表达什么意思?
  • 【课程设计/毕业设计】基于springboot+vue的医药管理系统【附源码、数据库、万字文档】
  • springboot_ssm842智慧家政在线预约管理系统的设计与实现ssm
  • 硬核科普:从“教室点名”看懂 ARP 协议的全过程
  • 2026年,测试报告将由AI自动生成,你只需做决策
  • FIND_IN_SET()方法
  • GPEN人像修复实战:一张模糊照如何重生