文档中心
Python瀹炴垬3鍒嗛挓鏁欎綘鑷姩妫€楠孲SL璇佷功鏄惁瀹夊叏
时间 : 2025-09-27 16:30:29浏览量 : 2

SSL证书是网站安全的"身份证",就像我们去银行办事要核对身份证一样,浏览器访问网站时也会检查SSL证书是否有效。但人工检查成百上千个证书太麻烦,今天教你用Python写一个自动化工具,快速揪出问题证书!
一、为什么需要检查SSL证书?
想象一下:你去网购,浏览器突然弹出"此网站证书已过期"的警告——这就像发现商家的营业执照是伪造的,你敢付款吗?
常见SSL证书问题举例:
1. 过期失效(如2025年Let's Encrypt百万证书过期事件)
2. 域名不匹配(证书绑定的域名和实际访问的域名不一致)
3. 签发机构不受信任(比如自签名证书)
二、Python检验SSL证书的核心库
用Python的`ssl`和`socket`库就能搞定,原理分三步:
1. 建立连接:像浏览器一样和服务器"握手"
2. 获取证书:拿到服务器的"身份证信息"
3. 解析验证:检查有效期、颁发者等关键字段
```python
import ssl
import socket
from datetime import datetime
def check_cert(hostname, port=443):
context = ssl.create_default_context()
with socket.create_connection((hostname, port)) as sock:
with context.wrap_socket(sock, server_hostname=hostname) as ssock:
cert = ssock.getpeercert()
解析证书有效期
expire_date = datetime.strptime(cert['notAfter'], '%b %d %H:%M:%S %Y %Z')
days_left = (expire_date - datetime.now()).days
print(f"域名: {hostname}")
print(f"颁发者: {cert['issuer'][0][0][1]}")
print(f"剩余有效期: {days_left}天")
```
三、实战案例:批量检测企业内网服务
假设公司有100个Web服务,用这个脚本快速排查风险:
import concurrent.futures
domains = ["api.example.com", "admin.example.com", "payment.example.com"]
def batch_check(domains):
results = {}
with concurrent.futures.ThreadPoolExecutor() as executor:
future_to_domain = {executor.submit(check_cert, domain): domain for domain in domains}
for future in concurrent.futures.as_completed(future_to_domain):
domain = future_to_domain[future]
try:
results[domain] = future.result()
except Exception as e:
results[domain] = f"检测失败: {e}"
return results
输出示例:
- api.example.com 剩余89天 (正常)
- admin.example.com 剩余-2天!! (已过期)
- payment.example.com 检测失败: certificate verify failed (可能是自签名)
四、高级技巧:验证更复杂的场景
1. 检查SAN扩展字段(防止子域名被冒用):
```python
for ext in cert['subjectAltName']:
print(f"备用名称: {ext[1]}")
```
2. 验证OCSP在线状态(实时确认证书是否被吊销):
import requests
ocsp_url = cert['OCSP'][0]
response = requests.get(ocsp_url)
实际需按RFC规范构造请求
五、常见问题解决方案
- 错误1:"certificate verify failed"
原因:缺少根证书链 → 安装`certifi`包并指定路径:
```python
import certifi
context.load_verify_locations(cafile=certifi.where())
```
- 错误2:"handshake timeout"
原因:服务器兼容性问题 → 调整协议版本:
context.minimum_version = ssl.TLSVersion.TLSv1_2
+SEO关键词布局
通过这个Python脚本,你可以轻松实现:
? 自动化巡检SSL证书
? 提前预警过期风险
? 规避中间人攻击风险
(关键词优化提示:Python SSL证书验证、HTTPS检测工具、自动化网络安全脚本、OpenSSL替代方案)
TAG:python检验ssl证书,python跳过ssl验证,pythonssl证书验证错误,python获取ssl证书信息,python ssl模块详解,python3 ssl