文档中心
Python瑙f瀽HTTPS璇佷功浠庡叆闂ㄥ埌瀹炴垬鐨勫畬鏁存寚鍗?txt
时间 : 2025-09-27 16:31:50浏览量 : 2

在网络安全领域,HTTPS证书是保障数据传输安全的核心组件。作为网络安全从业人员,我们经常需要分析证书的有效性、颁发机构或过期时间等信息。本文将带你用Python轻松解析HTTPS证书,并通过实际案例演示如何自动化检测证书安全问题。
一、HTTPS证书是什么?为什么需要解析?
简单来说,HTTPS证书就像网站的“身份证”,由权威机构(CA)颁发,用于验证网站真实性并加密数据传输。如果证书有问题(比如过期或被篡改),浏览器会弹出警告,用户可能遭遇钓鱼攻击。
常见需解析的场景:
1. 自动化监控:批量检查公司旗下网站的证书是否即将过期。
2. 安全审计:分析第三方服务的证书是否合规(如SHA-1弱算法)。
3. 渗透测试:提取证书中的域名信息,寻找子域名或配置错误。
二、Python解析HTTPS证书的4种方法
方法1:用`ssl`库获取基础信息
Python内置的`ssl`库可直接获取证书:
```python
import ssl
import socket
hostname = "www.baidu.com"
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()
print("颁发者:", cert['issuer'])
print("有效期至:", cert['notAfter'])
```
输出示例:
颁发者: ((('countryName', 'US'),), (('organizationName', 'DigiCert Inc'),), ...)
有效期至: Oct 20 23:59:59 2025 GMT
方法2:用`cryptography`库解析细节
需要更专业的字段解析时(如公钥算法),推荐使用`cryptography`:
from cryptography import x509
from cryptography.hazmat.backends import default_backend
将DER格式证书转换为可读对象
cert = x509.load_der_x509_certificate(ssock.getpeercert(binary_form=True), default_backend())
print("签名算法:", cert.signature_algorithm_oid._name)
print("SAN扩展:", cert.extensions.get_extension_for_class(x509.SubjectAlternativeName).value)
方法3:命令行工具转Python(OpenSSL)
通过`subprocess`调用OpenSSL命令:
import subprocess
result = subprocess.run(
["openssl", "s_client", "-connect", "baidu.com:443", "-servername", "baidu.com"],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True,
input="\n"
避免交互阻塞
)
print(result.stdout)
方法4:第三方库`pyOpenSSL`
适合需要深度控制的场景:
from OpenSSL import SSL
conn = SSL.Connection(SSL.Context(SSL.SSLv23_METHOD), socket.socket())
conn.connect((hostname, 443))
cert = conn.get_peer_certificate()
print("版本号:", cert.get_version())
三、实战案例:批量检测过期证书
假设我们需要监控100个域名,自动预警即将过期的证书:
import datetime
domains = ["baidu.com", "github.com", "example.com"]
warning_days = 30
for domain in domains:
try:
cert = ssl.get_server_certificate((domain, 443))
x509_cert = x509.load_pem_x509_certificate(cert.encode(), default_backend())
expire_date = x509_cert.not_valid_after
if (expire_date - datetime.datetime.now()).days < warning_days:
print(f"[!] {domain} 证书将在{(expire_date - datetime.datetime.now()).days}天后过期!")
except Exception as e:
print(f"[x] {domain}检测失败: {str(e)}")
[!] example.com 证书将在15天后过期!
[x] expired.badssl.com检测失败: certificate has expired
四、安全注意事项与进阶技巧
1. 验证链完整性
使用`certifi`库校验CA链:
```python
context.load_verify_locations(cafile=certifi.where())
```
2. 处理自签名证书
忽略验证时需明确风险:
context.check_hostname = False
context.verify_mode = ssl.CERT_NONE
3. 提取关键威胁指标
- OCSP URL:检查吊销状态 `cert.extensions.get_extension_for_oid(x509.OID_OCSP)`
- CRL分发点: `x509.OID_CRL_DISTRIBUTION_POINTS`
五、与资源推荐
通过Python解析HTTPS证书,我们可以快速构建自动化安全工具。如果你想深入学习:
- 工具推荐:[testssl.sh](https://testssl.sh/)(全面的命令行检测工具)
- 标准参考:[RFC5280](https://tools.ietf.org/html/rfc5280)(X.509证书规范)
掌握这些技能后,你不仅能高效完成日常运维,还能在渗透测试中发现隐藏风险!
TAG:Python解析https证书,https证书生成工具,https证书查询,证书下载地址,https证书安装教程,https证书在哪存放,https证书流程,https网站证书,https证书内容,https 证书链