讲师中心 微信公众号
AI工具推荐 视频效率加速

怎么用Python自动监控SSL证书过期时间并提前邮件预警

酷涛大大_3331

酷涛大大_3331

发布时间:2026-05-31 14:39:18

|

799人浏览过

|

来源于php中文网

原创

应使用Python ssl模块而非openssl命令获取证书信息,通过ssl.create_default_context()建立TLS连接,调用sock.getpeercert()获取字典格式证书,用ssl.cert_time_to_seconds()解析notAfter字段为Unix时间戳,结合超时控制、异常处理、安全邮件发送及生产级调度机制实现稳定监控。

怎么用python自动监控ssl证书过期时间并提前邮件预警

用 ssl 模块获取证书信息,别依赖外部命令

直接调用系统 openssl 命令(比如 subprocess.run(['openssl', 's_client', ...]))看似简单,但跨平台兼容差、超时难控制、输出格式不稳定。Python 自带的 ssl 模块能干净地建立 TLS 连接并提取原始证书,更可靠。

关键点:必须用 ssl.create_default_context(),否则可能跳过证书验证或拿不到完整链;连接后从 sock.getpeercert() 获取的是字典格式的证书信息,其中 'notAfter' 字段是 PEM 解析后的过期时间字符串(如 'Sep 15 12:34:56 2025 GMT')。

  • 务必设置 timeout(建议 5–10 秒),避免 DNS 卡住或服务无响应拖慢整个监控流程
  • 捕获 ssl.SSLCertVerificationError、socket.timeout、ConnectionRefusedError 等异常,不能让单个域名失败中断全部检查
  • 注意:有些 CDN 或反向代理(如 Cloudflare)会返回其自身证书,不是源站证书——这属于预期行为,需在配置中明确目标域名语义

解析 notAfter 时间要用 ssl.cert_time_to_seconds()

手动用 datetime.strptime() 解析 notAfter 字符串容易出错:格式受 locale 影响,GMT 时区处理易漏,且不同 OpenSSL 版本输出空格数可能不一致。Python 的 ssl.cert_time_to_seconds() 是专为此设计的内部函数,稳定、无依赖、直接返回 Unix 时间戳。

示例:

立即学习“Python免费学习笔记(深入)”;

macOS UI 自动化技能包 —— 用 Python 控制你的 Mac
macOS UI 自动化技能包 —— 用 Python 控制你的 Mac

让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限

下载
import ssl
cert = sock.getpeercert()
expire_ts = ssl.cert_time_to_seconds(cert['notAfter'])
days_left = (expire_ts - time.time()) // 86400
  • 该函数只接受 'notAfter' 或 'notBefore' 字符串,传其他值会抛 ValueError
  • 返回值是 float,比较时建议转 int 或用 // 86400 向下取整,避免浮点误差影响告警阈值判断
  • 如果证书已过期,expire_ts 成立,可立即触发高优先级告警

发邮件别硬编码 SMTP 凭据,用环境变量或配置文件

把邮箱密码写死在脚本里(尤其是推送到 Git)是典型安全隐患。应通过 os.getenv('SMTP_PASSWORD') 读取,配合 .env 文件或系统级环境变量管理。

SMTP 发送本身要处理几个现实问题:

  • Gmail/Outlook 等主流邮箱要求开启「应用专用密码」或 OAuth2,普通密码会报 SMTPAuthenticationError
  • 国内企业邮箱常禁用非加密端口,必须用 starttls() + 587 端口,或 SSL + 465 端口,不能默认套用一个配置
  • 邮件内容建议用 MIMEText(..., _charset='utf-8'),避免中文主题或正文乱码
  • 一次发送多个收件人时,sendmail() 的 rcpt 参数必须是 list,不是 comma-separated string

定时检查别用 time.sleep() 轮询,改用 APScheduler 或 cron

用 while True: check_all(); time.sleep(3600) 看似省事,但进程崩溃后不会自启,时间漂移严重,且无法优雅退出(Ctrl+C 可能卡在 sleep 中)。生产环境应交由成熟调度器管理。

  • Linux 下推荐直接写 crontab -e,例如每 4 小时跑一次:0 */4 * * * /usr/bin/python3 /path/to/check_ssl.py >/dev/null 2>&1
  • 若需复杂逻辑(如失败重试、任务日志聚合),可用 APScheduler 的 BlockingScheduler,但必须搭配 systemd 或 supervisor 管理进程生命周期
  • 每次执行前建议先检查是否已有同名进程在运行(用 pidfile 或 psutil),防止网络延迟导致多次并发执行,误发重复告警

真正麻烦的不是连上网站拿证书,而是证书链中间件(比如 Let’s Encrypt 的 ISRG Root X1 升级)、SNI 主机名缺失、IP 直连绕过 CDN 导致证书不匹配这些边界情况——它们不会报“证书过期”,但会让 getpeercert() 返回空或抛出意外异常。上线前至少对 5 类不同架构的线上域名(自建 Nginx、Cloudflare、AWS ALB、阿里云 SLB、纯 IP 站点)各跑一轮真实检测。

热门AI工具

更多
PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

1891

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

5164

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1829

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

31157

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3687

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3707

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

1243

2023.08.11

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

616

2023.08.10

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

20

2026.11.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn