python - 用python生成xml签名的问题
问题描述
我想签署以下名为 example.xml 的 xml
<?xml version='1.0' encoding='ISO-8859-1'?>
<Ficha version="1.0">
<Documento ID="F1">
<Animal>
<tipo>33</Tipo>
<raza>1</raza>
<Fch>2021-02-22</Fch>
</Animal>
</Documento>
</Ficha>
我在python中使用以下代码
from lxml import etree
import xml.etree.ElementTree as ET
from signxml import XMLSigner, XMLVerifier
import signxml
import sys
file='example.xml'
uri='F1'
ET.register_namespace('', "http://www.w3.org/2000/09/xmldsig#");
parser = etree.XMLParser(encoding='ISO-8859-1', resolve_entities=False)
el = ET.parse(file,parser)
root = el.getroot()
cert = open("cert.pem").read()
key = open("key.pem").read()
signed_root = XMLSigner(method=signxml.methods.enveloped,
signature_algorithm='rsa-sha1',
c14n_algorithm='http://www.w3.org/TR/2001/REC-xml-c14n-20010315',
digest_algorithm="sha1").sign(root, key=key,cert=cert,reference_uri=uri,always_add_key_value=True)
tree = ET.ElementTree(signed_root)
生成签名,但是...生成的 xml 文件是
<?xml version='1.0' encoding='ISO-8859-1'?>
<Ficha xmlns="http://www.w3.org/2000/09/xmldsig#" version="1.0">
<Documento ID="F1">
<Animal>
<tipo>33</Tipo>
<raza>1</raza>
<Fch>2021-02-22</Fch>
</Animal>
</Documento>
<Signature>
.....
.....
.....
</Signature>
</Ficha>
我想要的是:
<?xml version='1.0' encoding='ISO-8859-1'?>
<Ficha version="1.0">
<Documento ID="F1">
<Animal>
<tipo>33</Tipo>
<raza>1</raza>
<Fch>2021-02-22</Fch>
</Animal>
</Documento>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
.....
.....
.....
</Signature>
</Ficha>
我在做什么错我需要将属性xmlns="http://www.w3.org/2000/09/xmldsig#" 从 ficha 标签更改为签名标签
解决方案
Ficha 是您的根元素,我认为您使用 .sign(root,.....
我会给签名元素一个变量名并替换
.sign(根...
和
.sign(signature_variable...
推荐阅读
- javascript - Laravel 6 带删除的多文件预览
- android-studio - android studio更新补丁在哪里下载的?
- python - 从文件 md5 和文件名中生成一致的 uuid,如哈希
- reactjs - 将 UI 组件双向绑定到可观察对象以减少渲染的最佳方法是什么?
- flutter - Flutter:如何将容器的高度调整为其连续兄弟的最大高度
- python - python中的'if'和'if not',循环搜索文本文件中的特定子字符串。两者有什么区别?什么时候用哪个?
- types - 我如何让 Agda 的宇宙检查器相信我所做的事情是有根据的?
- javascript - Enter 键的行为类似于 JavaScript 中的箭头键
- amazon-web-services - 将 Elasticache 与 RDS 连接起来?
- vue.js - 如何在 vuex 中使用 InfiniteLoading(错误)