Цифровая подпись Xml с C# .NET Core 1.1

Я работаю над взаимодействием на стороне клиента с веб-службами SOAP, используя .NET Core (последняя версия на данный момент 1.1.) и C # (фактически Omnisharp). Запросы должны быть подписаны цифровой подписью в оболочке с использованием метода подписи 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>

Вся документация, которую мне удалось найти, относится к использованию класса SignedXml, который недоступен в .NET Core. Есть ли у кого-нибудь предложение или ссылка, чтобы поделиться, как я могу сделать эту подпись (и требуемую канонизацию) без класса SignedXml? Или, может быть, есть какая-то неофициальная версия SignedXml, о которой я не знаю?


person daneejela    schedule 27.05.2017    source источник


Ответы (1)


SignedXml находится в дереве по адресу https://github.com/dotnet/corefx и предположительно будет доступен с предстоящим выпуском 2.0 (как пакет nuget, а не общий пакет фреймворка).

У него много зависимостей от типов 2.0, поэтому было бы сложно попытаться перенести его обратно на 1.1; но, возможно, вы могли бы сократить его до ваших конкретных потребностей.

Или попробуйте предварительную версию 2.0 и посмотрите, все ли работает.

person bartonjs    schedule 27.05.2017