ssl新闻资讯

文档中心

Python瀹炴垬3绉嶆柟娉曡交鏉捐幏鍙朣SL璇佷功锛堥檮浠g爜绀轰緥锛?txt

时间 : 2025-09-27 16:31:41浏览量 : 3

2Python瀹炴垬3绉嶆柟娉曡交鏉捐幏鍙朣SL璇佷功锛堥檮浠g爜绀轰緥锛?txt

作为网络安全从业者,我经常需要检查网站的SSL证书信息。今天就用大白话教你用Python获取SSL证书的3种实用方法,并解释这些技术背后的安全原理。

一、为什么要用Python获取SSL证书?

SSL证书就像网站的"身份证",包含域名、有效期、颁发机构等关键信息。我们获取它主要是为了:

1. 自动化监控:批量检查证书是否过期(比如2025年Let's Encrypt根证书过期事件)

2. 安全审计:验证证书链是否完整(防止中间人攻击)

3. 漏洞排查:检测弱加密算法(如已淘汰的SHA-1)

二、方法1:用socket+ssl库(基础版)

这是最直接的方式,适合快速检查单个网站:

```python

import socket

import ssl

def get_cert_basic(hostname):

context = ssl.create_default_context()

with socket.create_connection((hostname, 443)) as sock:

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

cert = ssock.getpeercert()

return cert

示例:查看B站证书

print(get_cert_basic("www.bilibili.com"))

```

输出结果会显示:

- `notBefore`/`notAfter`(有效期)

- `issuer`(颁发机构)

- `subjectAltName`(支持的域名)

安全注意点

默认不验证证书有效性!实际项目中务必加上:

context = ssl.create_default_context()

context.check_hostname = True

强制验证域名

context.verify_mode = ssl.CERT_REQUIRED

必须校验

三、方法2:用requests库(进阶版)

适合需要处理HTTP请求的场景:

import requests

def get_cert_requests(url):

resp = requests.get(url, verify=True)

cert = resp.connection.sock.getpeercert()

示例:获取知乎证书

print(get_cert_requests("https://www.zhihu.com"))

优势

- 自动处理HTTPS握手

- 内置证书验证机制

- 支持代理等复杂场景

典型应用场景

批量扫描企业内网服务的证书状态时,可以配合多线程快速完成。

四、方法3:用cryptography库(专业版)

需要解析证书具体内容时使用:

from cryptography import x509

from cryptography.hazmat.backends import default_backend

def parse_cert(pem_data):

cert = x509.load_pem_x509_certificate(pem_data, default_backend())

print(f"版本: {cert.version}")

print(f"序列号: {cert.serial_number}")

print(f"签名算法: {cert.signature_algorithm_oid}")

示例解析PEM格式证书

with open("cert.pem", "rb") as f:

parse_cert(f.read())

这个方法的特殊价值在于可以:

1. 提取公钥进行加密验证

2. 分析扩展字段(如OCSP必须的AIA扩展)

3. 检测异常签发(比如自签名证书)

五、企业级实践建议

在实际安全运维中,我们通常会结合这些技术:

1. 自动化监控系统

检查证书是否30天内过期

from datetime import datetime

cert = get_cert_basic("example.com")

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

if (expiry_date - datetime.now()).days < 30:

send_alert_email()

2. CSR生成工具

使用cryptography库可以动态生成CSR请求文件,这在自动化部署场景非常有用。

3. 恶意证书检测

通过比对已知黑名单CA的指纹特征:

bad_issuers = ["Superfish Inc", "CNNIC ROOT"]

if any(issuer in cert['issuer'] for issuer in bad_issuers):

block_access()

六、常见问题解答

Q:为什么有时获取不到完整证书链?

A:可能是服务器配置问题,可以用openssl命令测试:

openssl s_client -showcerts -connect example.com:443

Q:如何应对HSTS保护的网站?

A Python默认会遵守HSTS策略,但调试时可以临时禁用:

```python

requests.get(url, verify=False)

仅限测试环境!

建议收藏这些代码片段,下次遇到TLS/SSL相关问题时就能快速诊断。如果对某个细节想深入了解,欢迎在评论区交流!

TAG:python 获取ssl证书,python爬虫ssl错误,python3 ssl,python ssl certificate,python ssl认证,python获取ssl证书信息