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...