惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Help Net Security
Help Net Security
G
Google Developers Blog
雷峰网
雷峰网
WordPress大学
WordPress大学
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Engineering at Meta
Engineering at Meta
Security Latest
Security Latest
T
Threat Research - Cisco Blogs
AWS News Blog
AWS News Blog
F
Full Disclosure
C
Cybersecurity and Infrastructure Security Agency CISA
T
The Exploit Database - CXSecurity.com
J
Java Code Geeks
U
Unit 42
C
Cyber Attacks, Cyber Crime and Cyber Security
V
V2EX
C
Cisco Blogs
博客园 - 司徒正美
Project Zero
Project Zero
L
LINUX DO - 热门话题
阮一峰的网络日志
阮一峰的网络日志
Blog — PlanetScale
Blog — PlanetScale
Scott Helme
Scott Helme
A
About on SuperTechFans
Hugging Face - Blog
Hugging Face - Blog
S
Securelist
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
S
Schneier on Security
G
GRAHAM CLULEY
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyberwarzone
Cyberwarzone
MongoDB | Blog
MongoDB | Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 叶小钗
T
Threatpost
Recorded Future
Recorded Future
C
CXSECURITY Database RSS Feed - CXSecurity.com
宝玉的分享
宝玉的分享
N
News and Events Feed by Topic
人人都是产品经理
人人都是产品经理
The Register - Security
The Register - Security
S
Security Archives - TechRepublic
博客园 - Franky
N
News | PayPal Newsroom
Simon Willison's Weblog
Simon Willison's Weblog
S
SegmentFault 最新的问题
W
WeLiveSecurity
A
Arctic Wolf
B
Blog

云野开源志

OpenClaw npm 升级踩坑记:从版本冲突到模块丢失 免责声明 openclaw(moltbot、Clawdbot)常见异常 大模型配置-千问免费版 初始化OpenClaw 安装openclaw记录 大年初一桃花谷 g.sh - Go语言环境管理工具安装脚本 install-cri-docker.sh - cri-dockerd安装脚本 install-docker.sh - Docker Engine快速安装脚本 install-docker2.sh - Docker 交互式安装脚本 install-nginx.sh - Nginx官方源快速安装脚本 install-zerotier.sh - ZeroTier 虚拟网络快速安装脚本 mng.sh - Nginx配置文件合并脚本 OpenSSL.sh - 自签名 SSL 证书生成脚本 SystemInfoMonitor.sh - 系统资源监控告警脚本 UpdateImages.sh - Docker 镜像批量更新脚本 为Hugo Next主题添加Umami统计支持 解忧杂货铺 - 栏目声明 Certd - 解决多平台SSL证书管理难题的神器 轻量级网络端口监控工具 GeoLite2 自动搬运仓库使用手册 MaxMind 免费账号注册 CloudFlare Accel Docker 搭建私有 DNS 服务器 hugo-theme-stack集成Umami openresty编译添加geoip2模块支持 GPU加速云原生应用,开启高性能计算新纪元 5. K8S Service与Ingress 4. K8S 控制器 Rancher搭建 3. K8S Pod 资源管理 2. K8S 基础资源管理 1. K8S 简介和认证介绍 Rancher集成AzureAD认证 Harbor 部署搭建 站点留言板 关于 友情链接
CheckSSL.sh - SSL证书到期时间监控脚本
云野开源志 · 2026-01-26 · via 云野开源志

总结摘要

CheckSSL.sh 是一个用于监控网站 SSL 证书到期时间的 Shell 脚本,当证书即将过期时会发送告警通知,帮助管理员及时更新证书,避免服务中断。

脚本功能

CheckSSL.sh 是一个用于批量监控多个网站 SSL 证书到期时间的 Shell 脚本。它通过 OpenSSL工具获取SSL证书的有效期信息,计算剩余有效天数,并在证书即将过期时通过 Bark推送告警通知。

核心特性

  • 批量监控多个域名的 SSL 证书
  • 自动计算证书剩余有效天数
  • 支持自定义告警阈值(默认 7 天)
  • 集成 Bark 推送告警通知
  • 支持 SNI(Server Name Indication)
  • 可灵活扩展其他告警通道(钉钉、企业微信等)

脚本依赖

系统工具依赖

  • openssl:用于获取 SSL 证书信息
  • curl:用于发送 Bark 告警请求
  • bashsh:脚本运行环境

外部服务依赖(可选)

  • Bark 服务:iOS 推送通知服务(如不需要告警可禁用)
    • 服务地址:https://api.day.app/
    • 获取 Bark Key:安装 Bark App 后自动生成

环境变量依赖

.env 文件配置

脚本需要加载同目录下的 .env文件,该文件应包含以下变量:

1
2
# Bark 通知密钥(从 Bark App 获取)
bark_key=xxxxxxxxxx

配置文件位置

  • 优先加载当前工作目录的 .env文件
  • 其次加载脚本所在目录的 .env文件

获取 Bark Key步骤

  1. 在 iOS设备 上安装 Bark App(App Store搜索"Bark")
  2. 打开 App 会自动生成一个唯一的 key
  3. 复制该 key到.env文件中

参考文档Bark 使用教程

内置变量说明

脚本内部定义的变量及其作用:

1
sites=("aliyun.com" "elisky.cn" "github.com")  # 要监控的域名列表

自定义监控站点: 取消脚本中第 18 行的注释,并修改为需要监控的域名:

1
sites=("example.com" "test.com" "api.yourdomain.com")

告警阈值配置

1
2
# 第 35 行附近,修改天数阈值
if [ $days_left -le 7 ]; then  # 改为$days_left -le 30则 30 天前告警

参数用法

本脚本无命令行参数,通过修改脚本内变量和配置文件进行定制:

  • 无参数模式:读取.env文件中的 bark_key,遍历 sites数组中的所有域名进行检查
  • 禁用告警:注释掉脚本中 Bark 相关的 curl命令(见使用方法部分)

使用方法

快速安装与使用

  1. 下载脚本

    1
    2
    3
    4
    5
    
    # 使用主下载地址
    bash <(curl -sL sc.eli1.top) CheckSSL download
    
    # 或使用备用地址
    bash <(curl -sL download.elisky.cn) CheckSSL download
  2. 创建配置文件

    1
    2
    3
    4
    5
    6
    
    # 复制模板文件
    cp .env-template .env
    
    # 编辑.env文件,填入 Bark Key
    vim .env
    # 添加:bark_key=your_bark_key_here
  3. 配置监控站点: 编辑 CheckSSL.sh脚本,修改第 18 行附近的 sites 数组:

    1
    2
    
    # 取消注释并修改为实际域名
    sites=("example.com" "api.example.com" "shop.example.com")
  4. 运行脚本

    1
    2
    3
    4
    5
    
    # 赋予执行权限
    chmod +x CheckSSL.sh
    
    # 执行脚本
    ./CheckSSL.sh

典型使用场景示例

场景 1:手动检查证书状态

1
2
3
4
5
6
# 临时检查几个域名的证书状态
# 编辑脚本,设置 sites 数组
sites=("google.com" "github.com")

# 运行脚本查看输出
./CheckSSL.sh

场景 2:定时监控任务(推荐)

1
2
3
4
5
# 添加到 crontab,每天上午 9 点执行
crontab -e

# 添加以下行
0 9 * * * /path/to/CheckSSL.sh >> /var/log/ssl_check.log 2>&1

场景 3:测试告警通道

1
2
3
4
5
# 临时修改脚本第 35 行,将阈值改为 999 天进行测试
if [ $days_left -le 999 ]; then  # 测试时会触发所有域名的告警

# 运行脚本验证 Bark 是否收到通知
./CheckSSL.sh

场景 4:禁用 Bark 告警

如果不需要 Bark 通知,可以注释掉相关代码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 方法 1:注释掉.env加载部分(脚本第 6-14 行)
# if [[ -f ./.env ]]; then
#     source ./.env
# elif [[ -f $SCRIPT_DIR/.env ]]; then
#     source $SCRIPT_DIR/.env
# else
#     echo ".env file not found!..."
#     exit 1
# fi

# 方法 2:注释掉告警触发部分(脚本第 36-40 行)
# if [ $days_left -le 7 ]; then
#     curl -s https://api.day.app/$bark_key/SSL 监控告警/"$site: 证书在 $days_left 天内过期"?group=jobtest
# else
#     echo "$site: Certificate expires on $formatted_date"
# fi

场景 5:自定义告警阈值

1
2
3
# 修改脚本第 35 行,将 7 天改为 30 天
if [ $days_left -le 30 ]; then  # 提前 30 天告警
    curl -s https://api.day.app/$bark_key/SSL 监控告警/"$site: 证书将在 $days_left 天后过期"

场景 6:扩展其他告警通道

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 在脚本中添加钉钉机器人告警
if [ $days_left -le 7 ]; then
    # Bark 告警
    curl -s https://api.day.app/$bark_key/SSL 监控告警/"$site: 证书在 $days_left 天内过期"
    
    # 钉钉机器人告警
    curl 'https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN' \
      -H 'Content-Type: application/json' \
      -d '{
        "msgtype": "text",
        "text": {
            "content": "SSL 证书告警:'"$site"' 的证书将在 '"$days_left"' 天后过期!"
        }
      }'
fi

实际应用场景

  • 多域名证书管理:企业或个人管理多个域名时,批量监控所有 SSL 证书状态
  • 自动化运维监控:集成到运维监控体系,作为 SSL 证书健康检查的一部分
  • 定时巡检任务:通过 cron定时任务实现每日/每周自动检查
  • 紧急告警通知:证书临近过期时立即推送通知,避免服务中断
  • 证书续期提醒:配合自动化续期工具(如 Let’s Encrypt),在自动续期失败时提供人工干预提醒
  • 第三方服务监控:监控依赖的第三方服务(如 API 提供商)的证书状态,提前感知潜在风险

注意事项

Bark 服务配置

  • Bark Key 保密性:不要将包含 Bark Key 的.env文件提交到代码仓库
  • 网络可达性:确保服务器能访问https://api.day.app/
  • 推送频率限制:避免过于频繁的检查触发 Bark 的频率限制

监控准确性

  • SNI 支持:脚本使用-servername参数支持 SNI,适用于虚拟主机环境
  • 端口假设:默认检查 443 端口,如果使用非标准 HTTPS 端口需要修改脚本
  • DNS 解析:确保服务器能正确解析被监控的域名

告警策略

  • 阈值设置建议

    • 7 天:适合有自动化续期流程的环境
    • 15-30 天:适合需要人工介入续期的环境
    • 90 天:Let’s Encrypt证书建议提前 90 天开始尝试续期
  • 避免告警疲劳:合理设置检查频率,建议每天检查 1 次即可

扩展与定制

  • 日志记录:建议将脚本输出重定向到日志文件便于审计

    1
    
    ./CheckSSL.sh >> /var/log/ssl_monitor.log 2>&1
  • 多重告警:可以同时配置多种告警通道(Bark + 钉钉 + 企业微信 + 邮件)

  • 错误处理:脚本缺少对网络异常的处理,建议在关键环境中增加错误重试机制

安全提示

  • 权限控制:确保.env文件的权限设置为仅所有者可读

  • 定期检查:即使有自动化监控,也建议定期手动检查重要域名的证书状态

  • 备份方案:准备备用的监控方案,防止单一监控系统失效