c - xmlsec lib 分离签名
问题描述
我正在尝试使用xmlsec1 library
在 XML 文档上执行分离签名。我已经执行了一个信封签名,所以我对图书馆的工作原理有了基本的了解。
我有两个 XML 文档,第一个代表要签名的文档(只是一个例子):
<?xml version="1.0" encoding="UTF-8"?>
<Data>Hello, World!</Data>
第二个是分离的签名模板:
<?xml version="1.0" encoding="UTF-8"?>
<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/2001/04/xmldsig-more#hmac-sha256" />
<Reference URI="#Data">
<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
<DigestValue></DigestValue>
</Reference>
</SignedInfo>
<SignatureValue/>
<KeyInfo>
<KeyName/>
</KeyInfo>
</Signature>
我不明白要签名的文档是由URI
XML 模板中的属性引用的,但我不明白如何引用xmlSecDSigCtx
xmlsec1 库使用的文档。
在封装签名示例中,只有一个文档传递给了 sign 方法:
xmlDocPtr doc = NULL;
xmlNodePtr node = NULL;
xmlSecDSigCtxPtr dsig_ctx = NULL;
doc = xmlParseDoc( (const unsigned char*)xml_doc );
node = xmlSecFindNode( xmlDocGetRootElement( doc ), xmlSecNodeSignature, xmlSecDSigNs );
dsig_ctx = xmlSecDSigCtxCreate( NULL );
// Key management skipped
xmlSecDSigCtxSign( dsig_ctx, node );
注意:我在 Linux 18.04 上使用 1.2.32 xmlsec1 版本。
解决方案
推荐阅读
- python - Django postgres 数据库连接 - 导入 _psycopg 时 DLL 加载失败:找不到指定的模块
- firebase - 如何在firestore中的集合之间复制数据?
- php - 使用php将json对象存储在数据库中
- amazon-web-services - 将 AWS Lightsail SSH 添加到 Bitbucket SSH 以允许访问克隆存储库
- r - 按绘图顺序排列堆积条形图
- javascript - 无法在另一个函数中访问间隔
- python - cx_Oracle 给出 ORA-01031 权限不足 以 SYSDBA 身份登录
- python - 我已经使用命令 pip 安装了 opencv-python,但是在 aws 上执行 import cv2 时遇到 importError
- laravel - 在 Laravel Gate 中获取用户 ID
- firebase - Flutter 应用程序使用 Shopify App Counterpart 将图像上传到 Firebase 存储 - 图像:媒体处理失败