[Python] Failed to sign xmlsec with named reference URI

Discussão em 'Python' iniciado por Stack, Junho 15, 2025.

  1. Stack

    Stack Membro Participativo

    I tried to use python-xmlsec to sign an xml document from a template. It works fine if URI="". However, if URI is not empty, then I got error "failed to sign"

    python 3.6 xmlsec from https://github.com/mehcode/python-xmlsec

    import xmlsec

    xml_in='''<Envelope xmlns="urn:envelope">
    <Data ID="1234">
    Hello, World!
    </Data>
    <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
    <SignedInfo>
    <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
    <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
    <Reference URI="#1234">
    <Transforms>
    <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
    </Transforms>
    <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
    <DigestValue></DigestValue>
    </Reference>
    </SignedInfo>
    <SignatureValue/>
    <KeyInfo>
    <KeyName/>
    </KeyInfo>
    </Signature>
    </Envelope>'''

    template=etree.ElementTree(etree.fromstring(xml_in)).getroot()

    signature_node = xmlsec.tree.find_node(template, xmlsec.constants.NodeSignature)

    ctx = xmlsec.SignatureContext()

    ctx.key = xmlsec.Key.from_file('c:/certificates/ercot.key', xmlsec.constants.KeyDataFormatPem)

    ctx.sign(signature_node)

    print(etree.tostring(template).decode())


    ERROR below:

    Traceback (most recent call last):

    File "<ipython-input-243-4de30b62be4f>", line 5, in <module>
    ctx.sign(signature_node)

    Error: (1, 'failed to sign')```

    Continue reading...

Compartilhe esta Página