2017-05-27 6 views
2

Ich arbeite an einer Client-seitigen Kommunikation mit einem SOAP-Web-Service mit .NET Core (neueste Version im Moment 1.1.) Und C# (eigentlich Omnisharp). Anfragen sollten digital mit einem umhüllten Signatur signiert werden, RSA-SHA1 Signaturverfahren verwendet wird, enden mit Struktur wie folgt aus:Xml Digitale Signatur mit C# .NET Core 1.1

<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> 

Die gesamte Dokumentation finde ich konnte beziehen sich auf die Verwendung SignedXml Klasse, die nicht in .NET ist Ader. Hat jemand Vorschlag oder Link zu teilen, wie kann ich diese Signatur (und erforderlichen Kanonisierung) ohne SignedXml-Klasse machen? Oder gibt es vielleicht eine inoffizielle Version von SignedXml, die mir nicht bekannt ist?

Antwort

2

SignedXml befindet sich in der Struktur unter https://github.com/dotnet/corefx und wird voraussichtlich mit der kommenden 2.0-Version verfügbar sein (als Nuget-Paket, nicht als gemeinsames Framework-Bundle).

Es hat viele Abhängigkeiten von 2.0-Typen, so dass es schwierig sein würde, es zurück auf 1.1 zu portieren; aber vielleicht könnten Sie es auf Ihre speziellen Bedürfnisse abstimmen.

Oder, versuchen Sie mit der Vorschau 2.0 Version und sehen, ob die Dinge nur funktionieren.