如何在Python的signxml库中启用SHA1进行XML签名?
解决signxml库使用SHA1生成XML签名的问题
signxml默认禁用SHA1这类弱算法,签名时需通过自定义SignatureConfiguration开启支持,具体步骤如下:
- 导入
SignatureConfiguration类 - 构建允许SHA1的配置对象,明确指定允许的签名算法和摘要算法
- 将配置对象传入
XMLSigner的config参数
完整代码示例
from signxml import XMLSigner, XMLVerifier, SignatureConfiguration # 构建允许SHA1的签名配置 sha1_config = SignatureConfiguration( signature_methods=["rsa-sha1"], digest_algorithms=["sha1"] ) # 使用自定义配置创建XMLSigner并执行签名 signed_saml_root = XMLSigner( method=signxml.methods.enveloped, signature_algorithm="rsa-sha1", digest_algorithm="sha1", c14n_algorithm="http://www.w3.org/2001/10/xml-exc-c14n#", config=sha1_config # 关键:传入自定义配置以启用SHA1 ).sign(saml_root, key=self.key, cert=self.cert, always_add_key_value=True) # 验证签名时同样需要传入允许SHA1的配置 verified_data = XMLVerifier().verify( signed_saml_root, x509_cert=self.cert, expect_config=sha1_config ).signed_xml
说明
报错的核心原因是signxml的默认SignatureConfiguration未包含SHA1相关算法,通过自定义配置将其加入允许列表后,即可正常使用SHA1完成签名与验证流程。
内容的提问来源于stack exchange,提问作者rocket_boomerang_19
相关产品推荐
相关产品推荐

