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

如何使用Python实现基于.p12证书的数字签名登录?

结论

完全可以纯Python实现全流程操作,无需调用任何外部软件。

实现原理

点击「使用数字签名登录」后唤起的第三方软件,本质上只完成了三个核心步骤:读取解析P12证书、按网站规则生成带签名的XML结构、向网站提交签名数据完成登录验证。上述三个步骤都有对应的Python成熟库可以原生实现。

两种实现方案

方案1:全请求模拟(无需Selenium)

  • 解析P12证书:使用cryptography库的PKCS12解析能力,直接从.p12文件中提取私钥、用户证书、CA证书链,示例代码片段如下:
from cryptography.hazmat.primitives.serialization import pkcs12
from cryptography.hazmat.backends import default_backend

with open("你的证书文件.p12", "rb") as f:
    p12_data = f.read()
private_key, cert, additional_certs = pkcs12.load_key_and_certificates(
    p12_data,
    password=b"你的证书密码",
    backend=default_backend()
)
  • 生成签名XML:使用signxml库,按照网站要求的XML签名规范,用提取到的私钥和证书对指定内容做签名,生成符合要求的XML结构。
  • 提交登录请求:使用requests库将生成的XML作为请求体提交到网站的登录验证接口,获取登录凭证(Cookie、Token等),后续所有业务请求携带该凭证即可完成操作。

方案2:保留原有Selenium逻辑

如果已经基于Selenium写好了大量填表逻辑不想重构,可以先通过方案1的方式拿到登录后的有效Cookie,再将Cookie注入到Selenium的浏览器实例中,直接跳过登录环节,执行后续的填表自动化流程。

注意事项
  • 实现前需要先通过抓包工具获取网站的签名规则:包括待签名的原文格式、XML结构要求、签名算法(常用为RSA-SHA256)、登录接口的请求参数规则,只要完全对齐原有第三方工具的请求逻辑即可验证通过。
  • 只要你使用的.p12证书本身是合法有效的,Python库解析出的证书信息和第三方工具读取的信息完全一致,不会出现证书校验不通过的问题。

内容的提问来源于stack exchange,提问作者Uldana Duisenaly

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:48:03