如何使用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
相关产品推荐
相关产品推荐

