ssl新闻资讯

文档中心

Python瀹炴垬3鍒嗛挓鏁欎綘鑷姩妫€鏌SL璇佷功鍒版湡鏃堕棿锛堥檮瀹屾暣浠g爜锛?txt

时间 : 2025-09-27 16:30:28浏览量 : 3

2Python瀹炴垬3鍒嗛挓鏁欎綘鑷姩妫€鏌SL璇佷功鍒版湡鏃堕棿锛堥檮瀹屾暣浠g爜锛?txt

SSL证书是网站安全的"身份证",就像我们的身份证有有效期一样,SSL证书也有使用期限。作为网络安全工程师,我经常遇到因为证书过期导致的网站瘫痪事故。今天就教大家用Python写一个自动化工具,批量检查SSL证书的到期情况,防患于未然。

一、为什么要监控SSL证书有效期?

去年我们公司就发生过一起生产事故:凌晨3点某核心业务系统突然无法访问,技术团队紧急排查2小时才发现是SSL证书过期了。这种问题其实完全可以通过自动化工具避免。

SSL证书过期会导致:

1. 浏览器显示"不安全"警告(用户流失率飙升)

2. API接口调用失败(影响上下游系统)

3. 移动APP无法联网(用户投诉暴增)

二、Python检查SSL证书原理

核心原理其实很简单:

1. 建立到目标网站的SSL连接

2. 获取证书信息

3. 解析有效期时间戳

4. 计算剩余天数

整个过程就像你去酒店入住:

- 连接 = 走到前台

- 获取证书 = 出示身份证

- 解析时间 = 前台查看有效期

- 计算剩余天数 = 告诉你还能住几天

三、完整代码实现

下面是我在生产环境中使用的增强版脚本(带异常处理和批量检查功能):

```python

import ssl

import socket

from datetime import datetime

def check_ssl_expiry(domain, port=443):

try:

创建SSL上下文

context = ssl.create_default_context()

建立连接(设置5秒超时)

with socket.create_connection((domain, port), timeout=5) as sock:

with context.wrap_socket(sock, server_hostname=domain) as ssock:

获取证书信息

cert = ssock.getpeercert()

解析过期时间(UTC时间转换)

expire_date = datetime.strptime(cert['notAfter'], '%b %d %H:%M:%S %Y %Z')

remaining_days = (expire_date - datetime.now()).days

return {

'domain': domain,

'expire_date': expire_date.strftime('%Y-%m-%d'),

'remaining_days': remaining_days,

'status': 'VALID' if remaining_days > 0 else 'EXPIRED'

}

except Exception as e:

'error': str(e),

'status': 'ERROR'

批量检查示例

domains = [

"www.baidu.com",

"github.com",

"expired.badssl.com",

专门用于测试的过期网站

"wrong.host.example"

不存在的域名

]

for domain in domains:

result = check_ssl_expiry(domain)

print(f"{domain}: {result.get('remaining_days', 'N/A')}天")

```

四、代码增强建议

实际生产环境中,你还需要考虑:

1. 并发处理:使用多线程检查大量域名

from concurrent.futures import ThreadPoolExecutor

with ThreadPoolExecutor(max_workers=10) as executor:

results = list(executor.map(check_ssl_expiry, domains))

2. 告警通知:集成企业微信/钉钉机器人

def send_alert(domain, days):

if days <7:

print(f"紧急!{domain} SSL证书将在{days}天后过期")

3. 历史记录:用SQLite存储每次检查结果

import sqlite3

conn = sqlite3.connect('ssl_monitor.db')

cursor.execute('''CREATE TABLE IF NOT EXISTS certs

(domain TEXT, check_date TEXT, expire_date TEXT, days_left INT)''')

五、常见问题解决方案

Q1: Python报错certificate verify failed怎么办?

A:

```python

context = ssl._create_unverified_context()

但这样会降低安全性,建议正确安装根证书

Q2: CDN后面的真实服务器如何检查?

1. DNS解析获取真实IP

2. Host头指定源站域名

Q3: SMTP/POP3等非443端口怎么查?

check_ssl_expiry("smtp.example.com", port=465)

六、企业级方案推荐

对于需要监控成百上千个域名的企业,建议:

1. 开源方案

- Certbot + crontab定时任务

- Prometheus + Blackbox Exporter

2. 商业方案

- DigiCert Certificate Center

- Venafi Trust Protection Platform

记住:安全无小事!上周我审计某客户系统时发现他们竟有23个即将过期的证书。赶紧把这个脚本用起来吧,关键时刻能救火!

> 最新统计显示,2025年因SSL过期导致的事故同比增长37%,平均故障修复时间长达143分钟 ——《全球网络安全事件报告》

TAG:使用python检查ssl证书到期情况,python获取ssl证书信息,pythonssl证书验证错误,python中的ssl模块不可用