如何解决数字签名XML文档以用于SOAP客户端
我正在尝试连接到需要对XML主体进行数字签名的SOAP服务器。我正在node.js中这样做
我有这个XML:
<soap:Body Id="body">
<S:SomeData xmlns:S="http://www.starstandards.org/STAR"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.starstandards.org/STAR Star Rev1.1BODsProcessCreditApplication.xsd">
<S:DataArea>
...
</S:DataArea>
</S:SomeData>
</soap:Body>
我需要生成此标头:
<soap:Header>
<SOAP-SEC:Security>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<ds:Reference URI="#body">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>...</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>...</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<X509Certificate xmlns="http://www.w3.org/2000/09/xmldsig#">UPDATE_VALUE</X509Certificate>
<X509IssuerSerial xmlns="http://www.w3.org/2000/09/xmldsig#">
<X509IssuerName>...</X509IssuerName>
<X509SerialNumber>...</X509SerialNumber>
</X509IssuerSerial>
</ds:X509Data>
</ds:KeyInfo>
</ds:Signature>
</SOAP-SEC:Security>
</soap:Header>
我不知道该怎么做。这是SOAP客户端处理的吗? soap npm软件包会在发出请求之前执行此操作吗?
我找到了这个软件包:https://github.com/yaronn/xml-crypto,但是在运行示例时遇到“未封闭的xml属性”错误:
var SignedXml = require('xml-crypto').SignedXml,FileKeyInfo = require('xml-crypto').FileKeyInfo,fs = require('fs')
var xml = "<library>" +
"<book>" +
"<name>Harry Potter</name>" +
"</book>"
"</library>"
var sig = new SignedXml()
sig.addReference("//*[local-name(.)='book']")
sig.signingKey = fs.readFileSync("pkey.cer")
sig.computeSignature(xml)
fs.writeFileSync("signed.xml",sig.getSignedXml())
加分:仅给了我一个公开密钥。我需要一个私钥吗?是我产生的东西还是应该给我的东西?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。