2009-06-23 10 views
2

Ich habe ein XML-Dokument Struktur ähnlich der folgendenDigital Sign Teile eines XML-Dokuments

<envelop> 
    <header>blaa</header> 
    <message>blaa blaa</message> 
    <footer></footer> 
</envelop> 

Ich möchte digital die Header und Nachrichtenelemente unterzeichnen und die Signatur der Fußzeile Element hinzuzufügen.

Wie kann ich die Elemente signieren und später die Signatur überprüfen (mit .net C#)? Lesen

Antwort

3

sollten Sie in der Lage sein, eine hinzuzufügen XPath-Transformation auf die Signatur. Es soll wie folgt aussehen:

 <Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116"> 
     <XPath xmlns:dsig="&dsig;"> 
     ... 
     </XPath> 
     </Transform> 

ich in XPath nicht fließend bin, aber es sollte einen XPath-Ausdruck zu formulieren, schließt das Footer-Element einfach sein. (Beachten Sie jedoch, dass XPath ein optionaler Teil von XML-DSIG ist, sodass nicht alle Implementierungen dies unterstützen können).

Alternativ, wenn Sie Ihr Dokument neu strukturieren könnte

<envelop> 
    <header>blaa</header> 
    <message>blaa blaa</message> 
    <Signature></Signature> 
</envelop> 

oder

<envelop> 
    <signedEnvelope> 
    <header>blaa</header> 
    <message>blaa blaa</message> 
    </signedEnvelope> 
    <Signature></Signature> 
</envelop> 

Sie es mithilfe eines umhüllten Signature umgehen konnte Transformation (erster Fall) oder durch die Unterzeichnung des signedEnvelope Element sein (zweiter Fall).

+0

Hi Rasmus, ich habe keine Möglichkeit, das XML neu zu strukturieren, da das Format von einer Drittanbieter-App bestimmt wird. Ich werde in die XPath-Transformation schauen. Danke – Eros

2
+1

Der Link erläutert, wie Sie das gesamte Dokument signieren können (indem Sie die Uri-Eigenschaft auf "" setzen).Wie kann ich dies erweitern, um Elemente von XML teilweise zu signieren und später die Signatur zu verifizieren? – Eros

0

Warum nicht w3 recomendation für XML folgen http://www.w3.org/2000/09/xmldsig# Unterzeichnung es eine grundlegende Struktur hat:

<Signature> 
    <SignedInfo> 
     <SignatureMethod /> 
     <CanonicalizationMethod /> 
     <Reference> 
     <Transforms> 
     <DigestMethod> 
     <DigestValue> 
     </Reference> 
     <Reference /> etc. 
    </SignedInfo> 
    <SignatureValue /> 
    <KeyInfo /> 
    <Object /> 
</Signature> 

Wenn Sie erweiterte Funktionen nutzen möchten, lesen Sie über XAdES - ich denke, es in C# avalible ist.

0

Ich sehe diesen Beitrag ist alt, aber vielleicht hat jemand jetzt die gleiche Notwendigkeit. Was Sie brauchen, ist irgendwie wie eine umhüllte Signatur in XMLDSIG. Der Unterschied besteht darin, dass Sie in XMLDSIG die Signaturdaten in einen Signatur-Knoten einbinden müssen.

Wenn Sie dies tun möchten, müssen Sie es selbst implementieren.

Ich bin in ein Projekt involviert, um eine Bibliothek zu entwickeln, die XAdES-Unterstützung für das .NET Framework bietet.

Wir haben gerade Version 1.0 veröffentlicht, die frühe Unterstützung für XAdES-BES bietet.

Sie können es finden in XAdES .NET Project

ich den Quellcode hoffen, irgendwie Ihnen helfen können.

Grüße.

2

Es gibt einen Microsoft-Partner, der dafür ziemlich gut sein könnte. Sie ermöglichen es Ihnen, digital signatures für XML (sowie alle anderen Plattformen) hinzuzufügen. Ich empfehle, ihr Produkt zu überprüfen, es heißt Cosign.