You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python的urllib3中获取HTTPS请求后的服务器证书?

在urllib3中发起HTTPS请求后获取服务器证书的方法

当然可以获取服务器证书,urllib3支持在成功建立HTTPS连接后提取服务器返回的证书信息,以下是具体操作方式:

基础获取方式(字典格式证书信息)

通过请求返回的HTTPResponse对象,可直接获取解析后的证书字典:

import urllib3

# 初始化连接池管理器
http = urllib3.PoolManager()

# 发起HTTPS请求
response = http.request('GET', 'https://example.com')

# 获取服务器证书(字典格式)
server_cert = response.connection.sock.getpeercert()

# 输出证书关键信息
print("证书主体:", server_cert['subject'])
print("证书颁发者:", server_cert['issuer'])
print("有效期起始:", server_cert['notBefore'])
print("有效期截止:", server_cert['notAfter'])

getpeercert()返回的字典包含了证书的核心字段,适合快速查看基础信息。

获取原始证书并解析详细内容

如果需要更完整的证书细节(比如扩展字段、签名算法等),可以获取原始DER格式证书,再用cryptography库解析:

import urllib3
from cryptography import x509
from cryptography.hazmat.backends import default_backend

http = urllib3.PoolManager()
response = http.request('GET', 'https://example.com')

# 获取DER编码的原始证书字节串
der_cert = response.connection.sock.getpeercert(True)

# 解析DER证书为X.509对象
cert_obj = x509.load_der_x509_certificate(der_cert, default_backend())

# 提取详细证书信息
print("证书主体:", cert_obj.subject.rfc4514_string())
print("证书颁发者:", cert_obj.issuer.rfc4514_string())
print("签名算法:", cert_obj.signature_algorithm_oid._name)
print("有效期起始:", cert_obj.not_valid_before)
print("有效期截止:", cert_obj.not_valid_after)

注意事项

  • 仅当HTTPS连接成功建立(包括证书验证通过)时,才能通过上述方式获取证书;若连接失败(如证书不被信任、网络错误),则无法提取。
  • 若使用ProxyManager或自定义连接池,只要能获取到对应的连接对象,同样可以调用getpeercert()方法获取证书。

内容的提问来源于stack exchange,提问作者Seva Alekseyev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 09:39:54