Xml 使用 C# .NET Core 1.1 的数字签名
Xml Digital signature with C# .NET Core 1.1
我正在使用 .NET Core(目前最新版本 1.1。)和 C#(实际上是 Omnisharp)与 SOAP Web 服务进行客户端通信。请求应使用 RSA-SHA1 签名方法使用封装签名进行数字签名,最终结构如下:
<soap:Envelope>
<soap:Body>
<MyRootElement>
<MyData>
...
</MyData>
<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="#G0xcabf5080-4D">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>4j9JKFMvg6Mmfx7ERu8R3WkZTtQ=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>....</SignatureValue>
<KeyInfo>
<X509Data>
<X509Certificate>....</X509Certificate>
<X509IssuerSerial>
<X509IssuerName>...</X509IssuerName>
<X509SerialNumber>72672627</X509SerialNumber>
</X509IssuerSerial>
</X509Data>
</KeyInfo>
</Signature>
</MyRootElement>
</soap:Body>
</soap:Envelope>
我能找到的所有文档都涉及使用 .NET Core 中不可用的 SignedXml class。
有没有人有建议或 link 分享我如何在没有 SignedXml class 的情况下制作此签名(和所需的规范化)?
或者也许有一些我不知道的非官方版本的 SignedXml?
SignedXml 在 https://github.com/dotnet/corefx 的树中,并且可能会在即将发布的 2.0 版本中提供(作为 nuget 包,而不是共享框架包)。
它对 2.0 类型有很多依赖,因此很难尝试将其移植回 1.1;但也许您可以根据您的特定需求进行细分。
或者,尝试使用 2.0 预览版,看看是否一切正常。
我正在使用 .NET Core(目前最新版本 1.1。)和 C#(实际上是 Omnisharp)与 SOAP Web 服务进行客户端通信。请求应使用 RSA-SHA1 签名方法使用封装签名进行数字签名,最终结构如下:
<soap:Envelope>
<soap:Body>
<MyRootElement>
<MyData>
...
</MyData>
<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="#G0xcabf5080-4D">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>4j9JKFMvg6Mmfx7ERu8R3WkZTtQ=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>....</SignatureValue>
<KeyInfo>
<X509Data>
<X509Certificate>....</X509Certificate>
<X509IssuerSerial>
<X509IssuerName>...</X509IssuerName>
<X509SerialNumber>72672627</X509SerialNumber>
</X509IssuerSerial>
</X509Data>
</KeyInfo>
</Signature>
</MyRootElement>
</soap:Body>
</soap:Envelope>
我能找到的所有文档都涉及使用 .NET Core 中不可用的 SignedXml class。 有没有人有建议或 link 分享我如何在没有 SignedXml class 的情况下制作此签名(和所需的规范化)? 或者也许有一些我不知道的非官方版本的 SignedXml?
SignedXml 在 https://github.com/dotnet/corefx 的树中,并且可能会在即将发布的 2.0 版本中提供(作为 nuget 包,而不是共享框架包)。
它对 2.0 类型有很多依赖,因此很难尝试将其移植回 1.1;但也许您可以根据您的特定需求进行细分。
或者,尝试使用 2.0 预览版,看看是否一切正常。