2

我正在使用 .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 类。有没有人有建议或链接来分享我如何在没有 SignedXml 类的情况下制作这个签名(以及所需的规范化)?或者也许有一些我不知道的非官方版本的 SignedXml?

4

1 回答 1

2

SignedXml 位于https://github.com/dotnet/corefx的树中,大概将在即将发布的 2.0 版本中提供(作为 nuget 包,而不是共享框架包)。

它对 2.0 类型有很多依赖,因此很难尝试将其移植回 1.1;但也许您可以根据您的特定需求进行调整。

或者,尝试使用 2.0 预览版,看看是否正常工作。

于 2017-05-27T21:00:32.247 回答