You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C# .NET验证含SignatureConfirmation的SOAP响应签名(已备Key.cert)

C# .NET验证SOAP响应签名的解决方案

核心思路

使用.NET内置的System.Security.Cryptography.Xml和System.Security.Cryptography.X509Certificates类库,加载指定证书后解析SOAP响应的XML签名节点,完成签名验证。


步骤1:加载验证证书

从本地Key.cert文件加载X509证书,提取公钥用于签名验证:

// 加载证书(如果是PFX格式带密码,需添加密码参数)
X509Certificate2 validationCert = new X509Certificate2("Key.cert");

步骤2:解析SOAP响应并验证签名

以下是完整的验证代码,需替换soapResponseContent为实际的SOAP响应字符串:

using System.Security.Cryptography.Xml;
using System.Security.Cryptography.X509Certificates;
using System.Xml;

// 1. 加载SOAP响应XML
XmlDocument soapXml = new XmlDocument();
soapXml.PreserveWhitespace = true; // 保留XML空白,签名验证对格式敏感
soapXml.LoadXml(soapResponseContent);

// 2. 配置命名空间管理器(匹配SOAP响应中的命名空间)
XmlNamespaceManager nsManager = new XmlNamespaceManager(soapXml.NameTable);
nsManager.AddNamespace("wsse", "http://docs.oasis-open.org/wss/oasis-wss-wssecurity-secext-1.1.xsd");
nsManager.AddNamespace("ds", "http://www.w3.org/2000/09/xmldsig#");

// 3. 定位WS-Security签名节点
XmlElement signatureElement = soapXml.SelectSingleNode("//wsse:Signature", nsManager) as XmlElement;
if (signatureElement == null)
{
    throw new InvalidOperationException("SOAP响应中未找到WS-Security签名节点");
}

// 4. 初始化签名验证对象
SignedXml signedXml = new SignedXml(soapXml);
signedXml.LoadXml(signatureElement);

// 5. 执行签名验证
bool isSignatureValid = signedXml.CheckSignature(validationCert, verifySignatureOnly: true);

// 输出验证结果
if (isSignatureValid)
{
    Console.WriteLine("SOAP响应签名验证通过");
}
else
{
    Console.WriteLine("SOAP响应签名验证失败");
}

关键注意事项

  • 命名空间匹配:确保代码中的命名空间URI与SOAP响应中的完全一致,否则无法定位签名节点
  • XML格式保留:必须设置PreserveWhitespace = true,因为XML签名对空白字符、换行等格式细节敏感
  • 证书格式:如果Key.cert是PFX格式(包含私钥),加载时需传入密码:new X509Certificate2("Key.cert", "your-cert-password")
  • SignatureConfirmation说明:你提供的SOAP响应中仅包含wsse11:SignatureConfirmation,该元素用于确认客户端请求签名已被服务端接收,并非响应本身的签名,请确认完整的SOAP响应是否包含wsse:Signature节点

内容的提问来源于stack exchange,提问作者ELTeleco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 04:06:01