将SHA1添加到signxml python

问题描述 投票:0回答:1

我正在使用库 signxml 签署 XML 签名以进行 SAML 身份验证。我们的实施者合作伙伴之一要求我们以 SHA1 形式发送签名。 XMLSigner 的基本配置不支持 SHA1,因为 SHA1 不安全,因此它已被弃用。不幸的是,我仍然必须将其作为 SHA1 发送,因为其他实现者不会更改他们的代码库。我已阅读库文档,但不确定如何强制 SHA1 支持。如果您在下面调用此代码,则会在代码中的此时出错:https://github.com/XML-Security/signxml/blob/9f06f4314f1a0480e22992bbb8209a71bc581e05/signxml/signer.py#L120

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#")\
        .sign(saml_root, key=self.key, cert=self.cert, always_add_key_value=True)
    verified_data = XMLVerifier().verify(signed_saml_root, x509_cert=self.cert).signed_xml

文档提到要对 SHA1 弃用执行以下操作:基于 SHA1 的算法在数字签名中使用并不安全。包含它们只是为了兼容旧版本,并且默认情况下处于禁用状态。要验证基于 SHA1 的签名,请使用:

XMLVerifier().verify(
    expect_config=SignatureConfiguration(
        signature_methods=...,
        digest_algorithms=...
    )
)

但这只是寻求验证,不确定如何使其在签名上起作用。有人可以提供一些关于如何让 SHA1 与 signxml 库一起使用的建议吗?

python xml saml sha1
1个回答
0
投票

您可以覆盖

source
中的函数check_deprecated_methods来传递错误。

from signxml import XMLSigner


class XMLSignerWithSHA1(XMLSigner):
    def check_deprecated_methods(self):
        pass

现在,您可以使用类

XMLSignerWithSHA1
来签名:

signer = XMLSignerWithSHA1(signature_algorithm=SignatureMethod.RSA_SHA1, digest_algorithm=DigestAlgorithm.SHA1)
signed = signer.sign(data, cert=cert, key=key)
© www.soinside.com 2019 - 2024. All rights reserved.