ssl新闻资讯

文档中心

Python瑙f瀽HTTPS璇佷功浠庡叆闂ㄥ埌瀹炴垬鐨勫畬鏁存寚鍗?txt

时间 : 2025-09-27 16:31:50浏览量 : 2

2Python瑙f瀽HTTPS璇佷功浠庡叆闂ㄥ埌瀹炴垬鐨勫畬鏁存寚鍗?txt

在网络安全领域,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 证书链