SignedXml SignedXml SignedXml SignedXml Class

Definition

Stellt einen Wrapper für ein Kern-XML-Signaturobjekt bereit, um das Erstellen von XML-Signaturen zu erleichtern.Provides a wrapper on a core XML signature object to facilitate creating XML signatures.

public ref class SignedXml
public class SignedXml
type SignedXml = class
Public Class SignedXml
Vererbung
SignedXmlSignedXmlSignedXmlSignedXml

Beispiele

Im folgenden Codebeispiel wird gezeigt, wie ein gesamtes XML-Dokument mit einer eingeschlossenen Signatur signiert und überprüft wird.The following code example shows how to sign and verify an entire XML document using an enveloped signature.

//
// This example signs an XML file using an
// envelope signature. It then verifies the 
// signed XML.
//
#using <System.Security.dll>
#using <System.Xml.dll>

using namespace System;
using namespace System::Security::Cryptography;
using namespace System::Security::Cryptography::X509Certificates;
using namespace System::Security::Cryptography::Xml;
using namespace System::Text;
using namespace System::Xml;

// Sign an XML file and save the signature in a new file. This method does not  
// save the public key within the XML file.  This file cannot be verified unless  
// the verifying code has the key with which it was signed.
void SignXmlFile( String^ FileName, String^ SignedFileName, RSA^ Key )
{
   
   // Create a new XML document.
   XmlDocument^ doc = gcnew XmlDocument;
   
   // Load the passed XML file using its name.
   doc->Load( gcnew XmlTextReader( FileName ) );
   
   // Create a SignedXml object.
   SignedXml^ signedXml = gcnew SignedXml( doc );
   
   // Add the key to the SignedXml document. 
   signedXml->SigningKey = Key;
   
   // Create a reference to be signed.
   Reference^ reference = gcnew Reference;
   reference->Uri = "";
   
   // Add an enveloped transformation to the reference.
   XmlDsigEnvelopedSignatureTransform^ env = gcnew XmlDsigEnvelopedSignatureTransform;
   reference->AddTransform( env );
   
   // Add the reference to the SignedXml object.
   signedXml->AddReference( reference );
   
   // Compute the signature.
   signedXml->ComputeSignature();
   
   // Get the XML representation of the signature and save
   // it to an XmlElement object.
   XmlElement^ xmlDigitalSignature = signedXml->GetXml();
   
   // Append the element to the XML document.
   doc->DocumentElement->AppendChild( doc->ImportNode( xmlDigitalSignature, true ) );
   if ( (doc->FirstChild)->GetType() == XmlDeclaration::typeid )
   {
      doc->RemoveChild( doc->FirstChild );
   }

   
   // Save the signed XML document to a file specified
   // using the passed string.
   XmlTextWriter^ xmltw = gcnew XmlTextWriter( SignedFileName,gcnew UTF8Encoding( false ) );
   doc->WriteTo( xmltw );
   xmltw->Close();
}


// Verify the signature of an XML file against an asymmetric 
// algorithm and return the result.
Boolean VerifyXmlFile( String^ Name, RSA^ Key )
{
   
   // Create a new XML document.
   XmlDocument^ xmlDocument = gcnew XmlDocument;
   
   // Load the passed XML file into the document. 
   xmlDocument->Load( Name );
   
   // Create a new SignedXml object and pass it
   // the XML document class.
   SignedXml^ signedXml = gcnew SignedXml( xmlDocument );
   
   // Find the "Signature" node and create a new
   // XmlNodeList object.
   XmlNodeList^ nodeList = xmlDocument->GetElementsByTagName( "Signature" );
   
   // Load the signature node.
   signedXml->LoadXml( safe_cast<XmlElement^>(nodeList->Item( 0 )) );
   
   // Check the signature and return the result.
   return signedXml->CheckSignature( Key );
}


// Create example data to sign.
void CreateSomeXml( String^ FileName )
{
   
   // Create a new XmlDocument Object*.
   XmlDocument^ document = gcnew XmlDocument;
   
   // Create a new XmlNode object.
   XmlNode^ node = document->CreateNode( XmlNodeType::Element, "", "MyElement", "samples" );
   
   // Add some text to the node.
   node->InnerText = "Example text to be signed.";
   
   // Append the node to the document.
   document->AppendChild( node );
   
   // Save the XML document to the file name specified.
   XmlTextWriter^ xmltw = gcnew XmlTextWriter( FileName,gcnew UTF8Encoding( false ) );
   document->WriteTo( xmltw );
   xmltw->Close();
}

int main()
{
   try
   {
      
      // Generate a signing key.
      RSACryptoServiceProvider^ Key = gcnew RSACryptoServiceProvider;
      
      // Create an XML file to sign.
      CreateSomeXml( "Example.xml" );
      Console::WriteLine( "New XML file created." );
      
      // Sign the XML that was just created and save it in a 
      // new file.
      SignXmlFile( "Example.xml", "signedExample.xml", Key );
      Console::WriteLine( "XML file signed." );
      
      // Verify the signature of the signed XML.
      Console::WriteLine( "Verifying signature..." );
      bool result = VerifyXmlFile( "SignedExample.xml", Key );
      
      // Display the results of the signature verification to 
      // the console.
      if ( result )
      {
         Console::WriteLine( "The XML signature is valid." );
      }
      else
      {
         Console::WriteLine( "The XML signature is not valid." );
      }
   }
   catch ( CryptographicException^ e ) 
   {
      Console::WriteLine( e->Message );
   }

}

//
// This example signs an XML file using an
// envelope signature. It then verifies the 
// signed XML.
//
using System;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Security.Cryptography.Xml;
using System.Text;
using System.Xml;

public class SignVerifyEnvelope
{

    public static void Main(String[] args)
    {
        try
        {
           // Generate a signing key.
           RSACryptoServiceProvider Key = new RSACryptoServiceProvider();

           // Create an XML file to sign.
           CreateSomeXml("Example.xml");
           Console.WriteLine("New XML file created."); 

           // Sign the XML that was just created and save it in a 
           // new file.
           SignXmlFile("Example.xml", "signedExample.xml", Key);
           Console.WriteLine("XML file signed."); 

           // Verify the signature of the signed XML.
           Console.WriteLine("Verifying signature...");
           bool result = VerifyXmlFile("SignedExample.xml", Key);

           // Display the results of the signature verification to 
           // the console.
           if(result)
           {
               Console.WriteLine("The XML signature is valid.");
           }
           else
           {
            Console.WriteLine("The XML signature is not valid.");
           }
        }
        catch(CryptographicException e)
        {
            Console.WriteLine(e.Message);
        }
    }


    // Sign an XML file and save the signature in a new file. This method does not  
    // save the public key within the XML file.  This file cannot be verified unless  
    // the verifying code has the key with which it was signed.
    public static void SignXmlFile(string FileName, string SignedFileName, RSA Key)
    {
        // Create a new XML document.
        XmlDocument doc = new XmlDocument();

        // Load the passed XML file using its name.
        doc.Load(new XmlTextReader(FileName));

        // Create a SignedXml object.
        SignedXml signedXml = new SignedXml(doc);

        // Add the key to the SignedXml document. 
        signedXml.SigningKey = Key;

        // Create a reference to be signed.
        Reference reference = new Reference();
        reference.Uri = "";

        // Add an enveloped transformation to the reference.
        XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform();
        reference.AddTransform(env);

        // Add the reference to the SignedXml object.
        signedXml.AddReference(reference);

        // Compute the signature.
        signedXml.ComputeSignature();

        // Get the XML representation of the signature and save
        // it to an XmlElement object.
        XmlElement xmlDigitalSignature = signedXml.GetXml();

        // Append the element to the XML document.
        doc.DocumentElement.AppendChild(doc.ImportNode(xmlDigitalSignature, true));
		
        if (doc.FirstChild is XmlDeclaration)  
        {
            doc.RemoveChild(doc.FirstChild);
        }

        // Save the signed XML document to a file specified
        // using the passed string.
        XmlTextWriter xmltw = new XmlTextWriter(SignedFileName, new UTF8Encoding(false));
        doc.WriteTo(xmltw);
        xmltw.Close();
    }

    // Verify the signature of an XML file against an asymetric 
    // algorithm and return the result.
    public static Boolean VerifyXmlFile(String Name, RSA Key)
    {
        // Create a new XML document.
        XmlDocument xmlDocument = new XmlDocument();

        // Load the passed XML file into the document. 
        xmlDocument.Load(Name);

        // Create a new SignedXml object and pass it
        // the XML document class.
        SignedXml signedXml = new SignedXml(xmlDocument);

        // Find the "Signature" node and create a new
        // XmlNodeList object.
        XmlNodeList nodeList = xmlDocument.GetElementsByTagName("Signature");

        // Load the signature node.
        signedXml.LoadXml((XmlElement)nodeList[0]);

        // Check the signature and return the result.
        return signedXml.CheckSignature(Key);
    }


    // Create example data to sign.
    public static void CreateSomeXml(string FileName)
    {
        // Create a new XmlDocument object.
        XmlDocument document = new XmlDocument();

        // Create a new XmlNode object.
        XmlNode  node = document.CreateNode(XmlNodeType.Element, "", "MyElement", "samples");
		
        // Add some text to the node.
        node.InnerText = "Example text to be signed.";

        // Append the node to the document.
        document.AppendChild(node);

        // Save the XML document to the file name specified.
        XmlTextWriter xmltw = new XmlTextWriter(FileName, new UTF8Encoding(false));
        document.WriteTo(xmltw);
        xmltw.Close();
    }
}
'
' This example signs an XML file using an
' envelope signature. It then verifies the 
' signed XML.
'
Imports System.Security.Cryptography
Imports System.Security.Cryptography.X509Certificates
Imports System.Security.Cryptography.Xml
Imports System.Text
Imports System.Xml



Public Class SignVerifyEnvelope
   
   Overloads Public Shared Sub Main(args() As [String])
      Try
         ' Generate a signing key.
         Dim Key As New RSACryptoServiceProvider()
         
         ' Create an XML file to sign.
         CreateSomeXml("Example.xml")
         Console.WriteLine("New XML file created.")
         
         ' Sign the XML that was just created and save it in a 
         ' new file.
         SignXmlFile("Example.xml", "signedExample.xml", Key)
         Console.WriteLine("XML file signed.")
         
         ' Verify the signature of the signed XML.
         Console.WriteLine("Verifying signature...")
         Dim result As Boolean = VerifyXmlFile("SignedExample.xml", Key)
         
         ' Display the results of the signature verification to 
         ' the console.
         If result Then
            Console.WriteLine("The XML signature is valid.")
         Else
            Console.WriteLine("The XML signature is not valid.")
         End If
      Catch e As CryptographicException
         Console.WriteLine(e.Message)
      End Try
   End Sub 
   
   
   
   ' Sign an XML file and save the signature in a new file. This method does not  
   ' save the public key within the XML file.  This file cannot be verified unless  
   ' the verifying code has the key with which it was signed.
   Public Shared Sub SignXmlFile(FileName As String, SignedFileName As String, Key As RSA)
      ' Create a new XML document.
      Dim doc As New XmlDocument()
      
      ' Load the passed XML file using its name.
      doc.Load(New XmlTextReader(FileName))
      
      ' Create a SignedXml object.
      Dim signedXml As New SignedXml(doc)
      
      ' Add the key to the SignedXml document. 
      signedXml.SigningKey = Key
      
      ' Create a reference to be signed.
      Dim reference As New Reference()
      reference.Uri = ""
      
      ' Add an enveloped transformation to the reference.
      Dim env As New XmlDsigEnvelopedSignatureTransform()
      reference.AddTransform(env)
      
      ' Add the reference to the SignedXml object.
      signedXml.AddReference(reference)
      
      ' Compute the signature.
      signedXml.ComputeSignature()
      
      ' Get the XML representation of the signature and save
      ' it to an XmlElement object.
      Dim xmlDigitalSignature As XmlElement = signedXml.GetXml()
      
      ' Append the element to the XML document.
      doc.DocumentElement.AppendChild(doc.ImportNode(xmlDigitalSignature, True))
      
      If TypeOf doc.FirstChild Is XmlDeclaration Then
         doc.RemoveChild(doc.FirstChild)
      End If
      
      ' Save the signed XML document to a file specified
      ' using the passed string.
      Dim xmltw As New XmlTextWriter(SignedFileName, New UTF8Encoding(False))
      doc.WriteTo(xmltw)
      xmltw.Close()
   End Sub
   
   
   ' Verify the signature of an XML file against an asymetric 
   ' algorithm and return the result.
   Public Shared Function VerifyXmlFile(Name As [String], Key As RSA) As [Boolean]
      ' Create a new XML document.
      Dim xmlDocument As New XmlDocument()
      
      ' Load the passed XML file into the document. 
      xmlDocument.Load(Name)
      
      ' Create a new SignedXml object and pass it
      ' the XML document class.
      Dim signedXml As New SignedXml(xmlDocument)
      
      ' Find the "Signature" node and create a new
      ' XmlNodeList object.
      Dim nodeList As XmlNodeList = xmlDocument.GetElementsByTagName("Signature")
      
      ' Load the signature node.
      signedXml.LoadXml(CType(nodeList(0), XmlElement))
      
      ' Check the signature and return the result.
      Return signedXml.CheckSignature(Key)
   End Function 
   
   
   
   ' Create example data to sign.
   Public Shared Sub CreateSomeXml(FileName As String)
      ' Create a new XmlDocument object.
      Dim document As New XmlDocument()
      
      ' Create a new XmlNode object.
      Dim node As XmlNode = document.CreateNode(XmlNodeType.Element, "", "MyElement", "samples")
      
      ' Add some text to the node.
      node.InnerText = "Example text to be signed."
      
      ' Append the node to the document.
      document.AppendChild(node)
      
      ' Save the XML document to the file name specified.
      Dim xmltw As New XmlTextWriter(FileName, New UTF8Encoding(False))
      document.WriteTo(xmltw)
      xmltw.Close()
   End Sub 
End Class 

Im folgenden Codebeispiel wird gezeigt, wie ein einzelnes Element eines XML-Dokuments mithilfe einer umumschlag Signatur signiert und überprüft wird.The following code example shows how to sign and verify a single element of an XML document using an enveloping signature.

//
// This example signs an XML file using an
// envelope signature. It then verifies the 
// signed XML.
//
#using <System.Xml.dll>
#using <System.Security.dll>
#using <System.dll>

using namespace System;
using namespace System::Security::Cryptography;
using namespace System::Security::Cryptography::Xml;
using namespace System::Text;
using namespace System::Xml;

// Sign an XML file and save the signature in a new file.
static void SignXmlFile( String^ FileName, String^ SignedFileName, RSA^ Key, array<String^>^ElementsToSign )
{
   
   // Check the arguments.  
   if ( FileName == nullptr )
      throw gcnew ArgumentNullException( L"FileName" );

   if ( SignedFileName == nullptr )
      throw gcnew ArgumentNullException( L"SignedFileName" );

   if ( Key == nullptr )
      throw gcnew ArgumentNullException( L"Key" );

   if ( ElementsToSign == nullptr )
      throw gcnew ArgumentNullException( L"ElementsToSign" );

   
   // Create a new XML document.
   XmlDocument^ doc = gcnew XmlDocument;
   
   // Format the document to ignore white spaces.
   doc->PreserveWhitespace = false;
   
   // Load the passed XML file using it's name.
   doc->Load( gcnew XmlTextReader( FileName ) );
   
   // Create a SignedXml object.
   SignedXml^ signedXml = gcnew SignedXml( doc );
   
   // Add the key to the SignedXml document. 
   signedXml->SigningKey = Key;
   
   // Loop through each passed element to sign 
   // and create a reference.
   System::Collections::IEnumerator^ myEnum = ElementsToSign->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      String^ s = safe_cast<String^>(myEnum->Current);
      
      // Create a reference to be signed.
      Reference^ reference = gcnew Reference;
      reference->Uri = s;
      
      // Add an enveloped transformation to the reference.
      XmlDsigEnvelopedSignatureTransform^ env = gcnew XmlDsigEnvelopedSignatureTransform;
      reference->AddTransform( env );
      
      // Add the reference to the SignedXml object.
      signedXml->AddReference( reference );
   }

   
   // Add an RSAKeyValue KeyInfo (optional; helps recipient find key to validate).
   KeyInfo^ keyInfo = gcnew KeyInfo;
   keyInfo->AddClause( gcnew RSAKeyValue( dynamic_cast<RSA^>(Key) ) );
   signedXml->KeyInfo = keyInfo;
   
   // Compute the signature.
   signedXml->ComputeSignature();
   
   // Get the XML representation of the signature and save
   // it to an XmlElement object.
   XmlElement^ xmlDigitalSignature = signedXml->GetXml();
   
   // Append the element to the XML document.
   doc->DocumentElement->AppendChild( doc->ImportNode( xmlDigitalSignature, true ) );
   if ( dynamic_cast<XmlDeclaration^>(doc->FirstChild) )
   {
      doc->RemoveChild( doc->FirstChild );
   }

   
   // Save the signed XML document to a file specified
   // using the passed string.
   XmlTextWriter^ xmltw = gcnew XmlTextWriter( SignedFileName,gcnew UTF8Encoding( false ) );
   doc->WriteTo( xmltw );
   xmltw->Close();
}


// Verify the signature of an XML file and return the result.
static Boolean VerifyXmlFile( String^ Name )
{
   
   // Check the arguments.  
   if ( Name == nullptr )
      throw gcnew ArgumentNullException( L"Name" );

   
   // Create a new XML document.
   XmlDocument^ xmlDocument = gcnew XmlDocument;
   
   // Format using white spaces.
   xmlDocument->PreserveWhitespace = true;
   
   // Load the passed XML file into the document. 
   xmlDocument->Load( Name );
   
   // Create a new SignedXml object and pass it
   // the XML document class.
   SignedXml^ signedXml = gcnew SignedXml( xmlDocument );
   
   // Find the "Signature" node and create a new
   // XmlNodeList object.
   XmlNodeList^ nodeList = xmlDocument->GetElementsByTagName( L"Signature" );
   
   // Load the signature node.
   signedXml->LoadXml( dynamic_cast<XmlElement^>(nodeList->Item( 0 )) );
   
   // Check the signature and return the result.
   return signedXml->CheckSignature();
}

int main()
{
   
   // Generate a signing key.
   RSACryptoServiceProvider^ Key = gcnew RSACryptoServiceProvider;
   try
   {
      
      // Specify an element to sign. 
      array<String^>^elements = {L"#tag1"};
      
      // Sign an XML file and save the signature to a 
      // new file.
      SignXmlFile( L"Test.xml", L"SignedExample.xml", Key, elements );
      Console::WriteLine( L"XML file signed." );
      
      // Verify the signature of the signed XML.
      Console::WriteLine( L"Verifying signature..." );
      bool result = VerifyXmlFile( L"SignedExample.xml" );
      
      // Display the results of the signature verification to 
      // the console.
      if ( result )
      {
         Console::WriteLine( L"The XML signature is valid." );
      }
      else
      {
         Console::WriteLine( L"The XML signature is not valid." );
      }
   }
   catch ( CryptographicException^ e ) 
   {
      Console::WriteLine( e->Message );
   }
   finally
   {
      
      // Clear resources associated with the 
      // RSACryptoServiceProvider.
      Key->Clear();
   }

   return 1;
}

//
// This example signs an XML file using an
// envelope signature. It then verifies the 
// signed XML.
//
using System;
using System.Security.Cryptography;
using System.Security.Cryptography.Xml;
using System.Text;
using System.Xml;

public class SignVerifyEnvelope
{

    public static void Main(String[] args)
    {
        // Generate a signing key.
       RSACryptoServiceProvider Key = new RSACryptoServiceProvider();

       try
       {
           // Specify an element to sign. 
           string[] elements =  { "#tag1" };

           // Sign an XML file and save the signature to a 
           // new file.
           SignXmlFile("Test.xml", "SignedExample.xml", Key, elements);
           Console.WriteLine("XML file signed.");

           // Verify the signature of the signed XML.
           Console.WriteLine("Verifying signature...");

           bool result = VerifyXmlFile("SignedExample.xml");

           // Display the results of the signature verification to 
           // the console.
           if (result)
           {
               Console.WriteLine("The XML signature is valid.");
           }
           else
           {
               Console.WriteLine("The XML signature is not valid.");
           }
       }
       catch (CryptographicException e)
       {
           Console.WriteLine(e.Message);
       }
       finally
       {
           // Clear resources associated with the 
           // RSACryptoServiceProvider.
           Key.Clear();
       }
   }

    // Sign an XML file and save the signature in a new file.
    public static void SignXmlFile(string FileName, string SignedFileName, RSA Key, string[] ElementsToSign)
    {
        // Check the arguments.  
        if (FileName == null)
            throw new ArgumentNullException("FileName");
        if (SignedFileName == null)
            throw new ArgumentNullException("SignedFileName");
        if (Key == null)
            throw new ArgumentNullException("Key");
        if (ElementsToSign == null)
            throw new ArgumentNullException("ElementsToSign");

        // Create a new XML document.
        XmlDocument doc = new XmlDocument();

        // Format the document to ignore white spaces.
        doc.PreserveWhitespace = false;

        // Load the passed XML file using it's name.
        doc.Load(new XmlTextReader(FileName));

        // Create a SignedXml object.
        SignedXml signedXml = new SignedXml(doc);

        // Add the key to the SignedXml document. 
        signedXml.SigningKey = Key;

        // Loop through each passed element to sign 
        // and create a reference.
        foreach (string s in ElementsToSign)
        {
            // Create a reference to be signed.
            Reference reference = new Reference();
            reference.Uri = s;

            // Add an enveloped transformation to the reference.
            XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform();
            reference.AddTransform(env);

            // Add the reference to the SignedXml object.
            signedXml.AddReference(reference);

        }



        // Add an RSAKeyValue KeyInfo (optional; helps recipient find key to validate).
        KeyInfo keyInfo = new KeyInfo();
        keyInfo.AddClause(new RSAKeyValue((RSA)Key));
        signedXml.KeyInfo = keyInfo;

        // Compute the signature.
        signedXml.ComputeSignature();

        // Get the XML representation of the signature and save
        // it to an XmlElement object.
        XmlElement xmlDigitalSignature = signedXml.GetXml();

        // Append the element to the XML document.
        doc.DocumentElement.AppendChild(doc.ImportNode(xmlDigitalSignature, true));


        if (doc.FirstChild is XmlDeclaration)
        {
            doc.RemoveChild(doc.FirstChild);
        }

        // Save the signed XML document to a file specified
        // using the passed string.
        XmlTextWriter xmltw = new XmlTextWriter(SignedFileName, new UTF8Encoding(false));
        doc.WriteTo(xmltw);
        xmltw.Close();
    }
    // Verify the signature of an XML file and return the result.
    public static Boolean VerifyXmlFile(String Name)
    {
        // Check the arguments.  
        if (Name == null)
            throw new ArgumentNullException("Name");

        // Create a new XML document.
        XmlDocument xmlDocument = new XmlDocument();

        // Format using white spaces.
        xmlDocument.PreserveWhitespace = true;

        // Load the passed XML file into the document. 
        xmlDocument.Load(Name);

        // Create a new SignedXml object and pass it
        // the XML document class.
        SignedXml signedXml = new SignedXml(xmlDocument);

        // Find the "Signature" node and create a new
        // XmlNodeList object.
        XmlNodeList nodeList = xmlDocument.GetElementsByTagName("Signature");

        // Load the signature node.
        signedXml.LoadXml((XmlElement)nodeList[0]);

        // Check the signature and return the result.
        return signedXml.CheckSignature();
    }
}
' This example signs an XML file using an
' envelope signature. It then verifies the 
' signed XML.
'
Imports System.Security.Cryptography
Imports System.Security.Cryptography.Xml
Imports System.Text
Imports System.Xml



Module SignVerifyEnvelope



    Sub Main(ByVal args() As String)
        ' Generate a signing key.
        Dim Key As New RSACryptoServiceProvider()

        Try
            ' Specify an element to sign. 
            Dim elements As String() = New String() {"#tag1"}

            ' Sign an XML file and save the signature to a 
            ' new file.
            SignXmlFile("Test.xml", "SignedExample.xml", Key, elements)
            Console.WriteLine("XML file signed.")

            ' Verify the signature of the signed XML.
            Console.WriteLine("Verifying signature...")

            Dim result As Boolean = VerifyXmlFile("SignedExample.xml")

            ' Display the results of the signature verification to \
            ' the console.
            If result Then
                Console.WriteLine("The XML signature is valid.")
            Else
                Console.WriteLine("The XML signature is not valid.")
            End If
        Catch e As CryptographicException
            Console.WriteLine(e.Message)
        Finally
            ' Clear resources associated with the 
            ' RSACryptoServiceProvider.
            Key.Clear()
        End Try

    End Sub


    ' Sign an XML file and save the signature in a new file.
    Sub SignXmlFile(ByVal FileName As String, ByVal SignedFileName As String, ByVal Key As RSA, ByVal ElementsToSign() As String)
        ' Check the arguments.  
        If FileName Is Nothing Then
            Throw New ArgumentNullException("FileName")
        End If
        If SignedFileName Is Nothing Then
            Throw New ArgumentNullException("SignedFileName")
        End If
        If Key Is Nothing Then
            Throw New ArgumentNullException("Key")
        End If
        If ElementsToSign Is Nothing Then
            Throw New ArgumentNullException("ElementsToSign")
        End If
        ' Create a new XML document.
        Dim doc As New XmlDocument()

        ' Format the document to ignore white spaces.
        doc.PreserveWhitespace = False

        ' Load the passed XML file using it's name.
        doc.Load(New XmlTextReader(FileName))

        ' Create a SignedXml object.
        Dim signedXml As New SignedXml(doc)

        ' Add the key to the SignedXml document. 
        signedXml.SigningKey = Key

        ' Loop through each passed element to sign 
        ' and create a reference.
        Dim s As String
        For Each s In ElementsToSign
            ' Create a reference to be signed.
            Dim reference As New Reference()
            reference.Uri = s

            ' Add an enveloped transformation to the reference.
            Dim env As New XmlDsigEnvelopedSignatureTransform()
            reference.AddTransform(env)

            ' Add the reference to the SignedXml object.
            signedXml.AddReference(reference)
        Next s

        ' Add an RSAKeyValue KeyInfo (optional; helps recipient find key to validate).
        Dim keyInfo As New KeyInfo()
        keyInfo.AddClause(New RSAKeyValue(CType(Key, RSA)))
        signedXml.KeyInfo = keyInfo

        ' Compute the signature.
        signedXml.ComputeSignature()

        ' Get the XML representation of the signature and save
        ' it to an XmlElement object.
        Dim xmlDigitalSignature As XmlElement = signedXml.GetXml()

        ' Append the element to the XML document.
        doc.DocumentElement.AppendChild(doc.ImportNode(xmlDigitalSignature, True))


        If TypeOf doc.FirstChild Is XmlDeclaration Then
            doc.RemoveChild(doc.FirstChild)
        End If

        ' Save the signed XML document to a file specified
        ' using the passed string.
        Dim xmltw As New XmlTextWriter(SignedFileName, New UTF8Encoding(False))
        doc.WriteTo(xmltw)
        xmltw.Close()

    End Sub

    ' Verify the signature of an XML file and return the result.
    Function VerifyXmlFile(ByVal Name As String) As [Boolean]
        ' Check the arguments.  
        If Name Is Nothing Then
            Throw New ArgumentNullException("Name")
        End If
        ' Create a new XML document.
        Dim xmlDocument As New XmlDocument()

        ' Format using white spaces.
        xmlDocument.PreserveWhitespace = True

        ' Load the passed XML file into the document. 
        xmlDocument.Load(Name)

        ' Create a new SignedXml object and pass it
        ' the XML document class.
        Dim signedXml As New SignedXml(xmlDocument)

        ' Find the "Signature" node and create a new
        ' XmlNodeList object.
        Dim nodeList As XmlNodeList = xmlDocument.GetElementsByTagName("Signature")

        ' Load the signature node.
        signedXml.LoadXml(CType(nodeList(0), XmlElement))

        ' Check the signature and return the result.
        Return signedXml.CheckSignature()

    End Function
End Module

Hinweise

Bei SignedXml der-Klasse handelt es sich um die .NET-Implementierung der XML-Signatur Syntax und-Verarbeitungs Spezifikationdes World Wide Web Consortium (W3C), auch bekannt als XMLDSIG (digitale XML-Signatur).The SignedXml class is the .NET implementation of the World Wide Web Consortium (W3C) XML Signature Syntax and Processing Specification, also known as XMLDSIG (XML Digital Signature). XMLDSIG ist eine Standard basierte, interoperable Möglichkeit, ein XML-Dokument oder andere Daten, die von einem Uniform Resource Identifier (URI) adressierbar sind, zu signieren und zu überprüfen.XMLDSIG is a standards-based, interoperable way to sign and verify all or part of an XML document or other data that is addressable from a Uniform Resource Identifier (URI).

Verwenden Sie SignedXml die-Klasse immer dann, wenn Sie signierte XML-Daten zwischen Anwendungen oder Organisationen auf eine standardmäßige Weise freigeben müssen.Use the SignedXml class whenever you need to share signed XML data between applications or organizations in a standard way. Alle mit dieser Klasse signierten Daten können durch eine beliebige konforme Implementierung der W3C-Spezifikation für XMLDSIG überprüft werden.Any data signed using this class can be verified by any conforming implementation of the W3C specification for XMLDSIG.

Die SignedXml -Klasse ermöglicht es Ihnen, die folgenden drei Arten von digitalen XML-Signaturen zu erstellen:The SignedXml class allows you to create the following three kinds of XML digital signatures:

SignaturtypSignature Type BeschreibungDescription
Eingeschlossene SignaturEnveloped signature Die Signatur ist im XML-Element enthalten, das signiert wird.The signature is contained within the XML element being signed.
Umhüllende SignaturEnveloping signature Der signierte XML-Code ist <Signature> im-Element enthalten.The signed XML is contained within the <Signature> element.
Intern getrennte SignaturInternal detached signature Die Signatur und das signierte XML befinden sich in demselben Dokument, aber keines der beiden Elemente enthält das andere.The signature and signed XML are in the same document, but neither element contains the other.

Außerdem gibt es eine vierte Art von Signatur, die als externe getrennte Signatur bezeichnet wird, wenn sich die Daten und die Signatur in separaten XML-Dokumenten befinden.There is also a fourth kind of signature called an external detached signature which is when the data and signature are in separate XML documents. Externe getrennte Signaturen werden von der SignedXml -Klasse nicht unterstützt.External detached signatures are not supported by the SignedXml class.

Die Struktur einer XML-Signatur.The structure of an XML Signature

XMLDSIG erstellt ein <Signature> -Element, das eine digitale Signatur eines XML-Dokuments oder anderer Daten enthält, die von einem URI adressierbar sind.XMLDSIG creates a <Signature> element, which contains a digital signature of an XML document or other data that is addressable from a URI. Das <Signature> -Element kann optional Informationen dazu enthalten, wo ein Schlüssel zu finden ist, mit dem die Signatur überprüft wird und welcher Kryptografiealgorithmus zum Signieren verwendet wurde.The <Signature> element can optionally contain information about where to find a key that will verify the signature and which cryptographic algorithm was used for signing. Die grundlegende Struktur sieht wie folgt aus:The basic structure is as follows:

<Signature xmlns:ds="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="">  
        <Transforms>  
          <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>  
        </Transforms>  
        <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>  
        <DigestValue>Base64EncodedValue==</DigestValue>  
      </Reference>  
    </SignedInfo>  
    <SignatureValue>AnotherBase64EncodedValue===</SignatureValue>  
</Signature>

Die Hauptbestandteile dieser Struktur sind:The main parts of this structure are:

  • Das <CanonicalizationMethod>-ElementThe <CanonicalizationMethod> element

    Gibt die Regeln für das Umschreiben Signature des-Elements aus XML/Text in Bytes für die Signatur Überprüfung an.Specifies the rules for rewriting the Signature element from XML/text into bytes for signature validation. Der Standardwert in .net ist http://www.w3.org/TR/2001/REC-xml-c14n-20010315, der einen vertrauenswürdigen Algorithmus identifiziert.The default value in .NET is http://www.w3.org/TR/2001/REC-xml-c14n-20010315, which identifies a trustworthy algorithm. Dieses Element wird durch die SignedInfo.CanonicalizationMethod -Eigenschaft dargestellt.This element is represented by the SignedInfo.CanonicalizationMethod property.

  • Das <SignatureMethod>-ElementThe <SignatureMethod> element

    Gibt den Algorithmus für die Signatur Generierung und-Überprüfung an, die auf <Signature> das-Element angewendet wurde, <SignatureValue>um den Wert in zu erzeugen.Specifies the algorithm used for signature generation and validation, which was applied to the <Signature> element to produce the value in <SignatureValue>. Im vorherigen Beispiel identifiziert der Wert http://www.w3.org/2000/09/xmldsig#rsa-sha1 eine RSA-PKCS1 SHA-1-Signatur.In the previous example, the value http://www.w3.org/2000/09/xmldsig#rsa-sha1 identifies an RSA PKCS1 SHA-1 signature. Aufgrund von Konnektivitätsproblemen mit SHA-1 empfiehlt Microsoft ein Sicherheitsmodell, das auf SHA-256 oder höher basiert.Due to collision problems with SHA-1, Microsoft recommends a security model based on SHA-256 or better. Dieses Element wird durch die SignatureMethod -Eigenschaft dargestellt.This element is represented by the SignatureMethod property.

  • Das <SignatureValue>-ElementThe <SignatureValue> element

    Gibt die kryptografische Signatur für das <Signature> -Element an.Specifies the cryptographic signature for the <Signature> element. Wenn diese Signatur nicht überprüft wird, wurde ein Teil des <Signature> Blocks manipuliert, und das Dokument wird als ungültig angesehen.If this signature does not verify, then some portion of the <Signature> block was tampered with, and the document is considered invalid. Solange der <CanonicalizationMethod> Wert vertrauenswürdig ist, ist dieser Wert äußerst widerstandsfähig gegen Manipulationen.As long as the <CanonicalizationMethod> value is trustworthy, this value is highly resistant to tampering. Dieses Element wird durch die SignatureValue -Eigenschaft dargestellt.This element is represented by the SignatureValue property.

  • Das URI -Attribut <Reference> des-Elements.The URI attribute of the <Reference> element

    Gibt ein Datenobjekt mithilfe eines URI-Verweises an.Specifies a data object using a URI reference. Dieses Attribut wird durch die Reference.Uri -Eigenschaft dargestellt.This attribute is represented by the Reference.Uri property.

    • Wenn Sie das URI -Attribut nicht angeben, d. Reference.Uri h. null, dass die-Eigenschaft auf festgelegt wird, bedeutet dies, dass die empfangende Anwendung die Identität des-Objekts kennt.Not specifying the URI attribute, that is, setting the Reference.Uri property to null, means that the receiving application is expected to know the identity of the object. In den meisten Fällen führt null ein URI dazu, dass eine Ausnahme ausgelöst wird.In most cases, a null URI will result in an exception being thrown. Verwenden Sie keinen null URI, es sei denn, die Anwendung arbeitet mit einem Protokoll, das Sie benötigt.Do not use a null URI, unless your application is interoperating with a protocol which requires it.

    • Das Festlegen URI des-Attributs auf eine leere Zeichenfolge gibt an, dass das Stamm Element des Dokuments signiert wird, eine Form der eingeschlossenen Signatur.Setting the URI attribute to an empty string indicates that the root element of the document is being signed, a form of enveloped signature.

    • Wenn der Wert des URI Attributs mit "#" beginnt, muss der Wert in ein Element im aktuellen Dokument aufgelöst werden.If the value of URI attribute starts with #, then the value must resolve to an element in the current document. Dieses Formular kann mit einem der unterstützten Signatur Typen verwendet werden (eingehüllte Signatur, Umschlag Signatur oder intern getrennte Signatur).This form can be used with any of the supported signature types (enveloped signature, enveloping signature or internal detached signature).

    • Alles andere wird als externe Ressourcen getrennte Signatur angesehen und wird von der SignedXml -Klasse nicht unterstützt.Anything else is considered an external resource detached signature and is not supported by the SignedXml class.

  • Das <Transforms>-ElementThe <Transforms> element

    Enthält eine geordnete Liste von <Transform> Elementen, die beschreiben, wie der Signatur Geber das zu verdauende Datenobjekt abgerufen hat.Contains an ordered list of <Transform> elements that describe how the signer obtained the data object that was digested. Ein Transformations Algorithmus ähnelt der Kanonisierungsmethode, aber anstatt das <Signature> Element umzuschreiben, wird der durch das URI -Attribut des <Reference> -Elements identifizierte Inhalt umgeschrieben.A transform algorithm is similar to the canonicalization method, but instead of rewriting the <Signature> element, it rewrites the content identified by the URI attribute of the <Reference> element. Das <Transforms> -Element wird durch die TransformChain -Klasse dargestellt.The <Transforms> element is represented by the TransformChain class.

    • Jeder Transformations Algorithmus ist so definiert, dass entweder XML (eine XPath-Knotengruppe) oder Bytes als Eingabe übernommen werden.Each transform algorithm is defined as taking either XML (an XPath node-set) or bytes as input. Wenn sich das Format der aktuellen Daten von den Transformations Eingabe Anforderungen unterscheidet, werden Konvertierungsregeln angewendet.If the format of the current data differs from the transform input requirements, conversion rules are applied.

    • Jeder Transformations Algorithmus ist so definiert, dass er entweder XML oder Bytes als Ausgabe erzeugt.Each transform algorithm is defined as producing either XML or bytes as the output.

    • Wenn die Ausgabe des letzten Transformations Algorithmus nicht in Bytes definiert ist (oder keine Transformationen angegeben wurden), wird die Kanonisierungsmethode als implizite Transformation verwendet (auch wenn ein anderer Algorithmus im <CanonicalizationMethod> -Element angegeben wurde).If the output of the last transform algorithm is not defined in bytes (or no transforms were specified), then the canonicalization method is used as an implicit transform (even if a different algorithm was specified in the <CanonicalizationMethod> element).

    • Der Wert http://www.w3.org/2000/09/xmldsig#enveloped-signature für den Transformations Algorithmus codiert eine Regel, die so interpretiert wird, dass <Signature> das Element aus dem Dokument entfernt wird.A value of http://www.w3.org/2000/09/xmldsig#enveloped-signature for the transform algorithm encodes a rule which is interpreted as remove the <Signature> element from the document. Andernfalls wird das Dokument durch einen Verifizierer einer eingeschlossenen Signatur Digest, einschließlich der Signatur, aber der Signatur Geber hätte das Dokument vor dem Anwenden der Signatur Digest, was zu unterschiedlichen Antworten geführt hat.Otherwise, a verifier of an enveloped signature will digest the document, including the signature, but the signer would have digested the document before the signature was applied, leading to different answers.

  • Das <DigestMethod>-ElementThe <DigestMethod> element

    Identifiziert die Digest-Methode (Cryptographic Hash), die auf den transformierten Inhalt angewendet URI werden soll, <Reference> der durch das-Attribut des-Elements identifiziert wird.Identifies the digest (cryptographic hash) method to apply on the transformed content identified by the URI attribute of the <Reference> element. Dies wird durch die Reference.DigestMethod -Eigenschaft dargestellt.This is represented by the Reference.DigestMethod property.

Auswählen einer KanonisierungsmethodeChoosing a canonicalization method

Es wird empfohlen, die standardmäßige .NET 1,0 http://www.w3.org/TR/2001/REC-xml-c14n-20010315-Kanonisierungsmethode zu verwenden, es sei denn, Sie verwenden eine Spezifikation, die einen anderen Wert erfordert.Unless interoperating with a specification which requires the use of a different value, we recommend that you use the default .NET canonicalization method, which is the XML-C14N 1.0 algorithm, whose value is http://www.w3.org/TR/2001/REC-xml-c14n-20010315. Der xml-c14n 1,0-Algorithmus muss von allen Implementierungen von XMLDSIG unterstützt werden, insbesondere, da es sich um eine implizite endgültige Transformation handelt, die angewendet werden soll.The XML-C14N 1.0 algorithm is required to be supported by all implementations of XMLDSIG, particularly as it is an implicit final transform to apply.

Es gibt Versionen von Kanonisierungsalgorithmen, die das Beibehalten von Kommentaren unterstützen.There are versions of canonicalization algorithms which support preserving comments. Die Kommentar Beibehaltung von kanonisierungsmethoden ist nicht empfehlenswert, da Sie das Prinzip "Signieren von Aktionen" verletzen.Comment-preserving canonicalization methods are not recommended because they violate the "sign what is seen" principle. Das heißt, dass die Kommentare in <Signature> einem-Element die Verarbeitungslogik für die Ausführung der Signatur nicht ändern, sondern lediglich den Signatur Wert.That is, the comments in a <Signature> element will not alter the processing logic for how the signature is performed, merely what the signature value is. In Kombination mit einem schwachen Signatur Algorithmus bietet ein Angreifer unnötige Möglichkeiten, eine Hash Kollision zu erzwingen, sodass ein Manipulations Dokument legitim erscheint.When combined with a weak signature algorithm, allowing the comments to be included gives an attacker unnecessary freedom to force a hash collision, making a tampered document appear legitimate. Im .NET Framework werden standardmäßig nur integrierte kanonisierer unterstützt.In the .NET Framework, only built-in canonicalizers are supported by default. Informationen zur Unterstützung zusätzlicher oder benutzerdefinierter kanonisierer SafeCanonicalizationMethods finden Sie unter der-Eigenschaft.To support additional or custom canonicalizers, see the SafeCanonicalizationMethods property. Wenn im Dokument eine Kanonisierungsmethode verwendet wird, die nicht in der durch die SafeCanonicalizationMethods -Eigenschaft dargestellten Auflistung CheckSignature enthalten ist, falsegibt die Methode zurück.If the document uses a canonicalization method that is not in the collection represented by the SafeCanonicalizationMethods property, then the CheckSignature method will return false.

Hinweis

Eine äußerst Defensive Anwendung kann alle Werte entfernen, die nicht von Signatur Bezeichnern aus der SafeCanonicalizationMethods Auflistung erwartet werden.An extremely defensive application can remove any values it does not expect signers to use from the SafeCanonicalizationMethods collection.

Sind die Verweis Werte vor Manipulationen sicher?Are the Reference values safe from tampering?

Ja, die <Reference> Werte sind sicher vor Manipulationen.Yes, the <Reference> values are safe from tampering. .NET überprüft die <SignatureValue> Berechnung vor der Verarbeitung eines <Reference> der Werte und der zugeordneten Transformationen und wird vorzeitig abgebrochen, um potenziell schädliche Verarbeitungsanweisungen zu vermeiden..NET verifies the <SignatureValue> computation before processing any of the <Reference> values and their associated transforms, and will abort early to avoid potentially malicious processing instructions.

Auswählen der zu Signier ElementeChoosing the elements to sign

Es wird empfohlen, den Wert für das URI -Attribut (oder die Uri -Eigenschaft auf eine leere Zeichenfolge festzulegen), wenn möglich, zu verwenden.We recommend that you use the value of "" for the URI attribute (or set the Uri property to an empty string), if possible. Dies bedeutet, dass das gesamte Dokument für die Digest-Berechnung berücksichtigt wird. das bedeutet, dass das gesamte Dokument vor Manipulationen geschützt ist.This means the whole document is considered for the digest computation, which means the whole document is protected from tampering.

Es ist sehr üblich, Werte URI in Form von Ankern, wie z. b. #foo, anzuzeigen, die auf ein Element verweisen, dessen ID-Attribut "foo" ist.It is very common to see URI values in the form of anchors such as #foo, referring to an element whose ID attribute is "foo". Leider ist dies einfach zu manipulieren, da dies nur den Inhalt des Target-Elements, nicht den Kontext, einschließt.Unfortunately, it is easy for this to be tampered with because this includes only the content of the target element, not the context. Das missbrauchen dieser Unterscheidung wird als XML Signature Wrapping (xSW) bezeichnet.Abusing this distinction is known as XML Signature Wrapping (XSW).

Wenn die Anwendung Kommentare als Semantik ansieht (was bei der Verarbeitung von XML nicht häufig der Fall ist), sollten Sie "#XPointer (/)" anstelle von "" und "#XPointer (ID (' foo '))" anstelle von "#foo" verwenden.If your application considers comments to be semantic (which is not common when dealing with XML), then you should use "#xpointer(/)" instead of "", and "#xpointer(id('foo'))" instead of "#foo". Die #XPointer Versionen werden als einschließen von Kommentaren interpretiert, während die Kurznamen-Formulare Kommentare ausschließen.The #xpointer versions are interpreted as including comments, while the shortname forms are excluding comments.

Wenn Sie Dokumente akzeptieren müssen, die nur teilweise geschützt sind, und Sie sicherstellen möchten, dass Sie denselben Inhalt lesen, den die Signatur geschützt hat, GetIdElement verwenden Sie die-Methode.If you need to accept documents which are only partially protected and you want to ensure that you are reading the same content that the signature protected, use the GetIdElement method.

Sicherheitsüberlegungen zum KeyInfo-ElementSecurity considerations about the KeyInfo element

Die Daten im optionalen <KeyInfo> -Element (d. h. die KeyInfo -Eigenschaft), das einen Schlüssel zum Überprüfen der Signatur enthält, sollten nicht vertrauenswürdig sein.The data in the optional <KeyInfo> element (that is, the KeyInfo property), which contains a key to validate the signature, should not be trusted.

Insbesondere wenn der KeyInfo Wert einen baren RSA-, DSA-oder ECDSA-öffentlichen Schlüssel darstellt, könnte das Dokument manipuliert worden sein, obwohl die CheckSignature -Methode meldet, dass die Signatur gültig ist.In particular, when the KeyInfo value represents a bare RSA, DSA or ECDSA public key, the document could have been tampered with, despite the CheckSignature method reporting that the signature is valid. Dies kann der Fall sein, wenn die Entität, die die Manipulation vornimmt, lediglich einen neuen Schlüssel generieren und das Manipulations Dokument mit diesem neuen Schlüssel erneut signieren muss.This can happen because the entity doing the tampering just has to generate a new key and re-sign the tampered document with that new key. Wenn die Anwendung also nicht überprüft, ob der öffentliche Schlüssel ein erwarteter Wert ist, sollte das Dokument so behandelt werden, als wäre es manipuliert worden.So, unless your application verifies that the public key is an expected value, the document should be treated as if it were tampered with. Dies erfordert, dass Ihre Anwendung den im Dokument eingebetteten öffentlichen Schlüssel untersucht und mit einer Liste bekannter Werte für den Dokument Kontext überprüft.This requires that your application examine the public key embedded within the document and verify it against a list of known values for the document context. Wenn das Dokument beispielsweise so interpretiert werden kann, dass es von einem bekannten Benutzer ausgestellt wird, überprüfen Sie den Schlüssel mit einer Liste bekannter Schlüssel, die von diesem Benutzer verwendet werden.For example, if the document could be understood to be issued by a known user, you'd check the key against a list of known keys used by that user.

Sie können den Schlüssel auch nach der Verarbeitung des Dokuments überprüfen, CheckSignatureReturningKey indem Sie die-Methode verwenden CheckSignature , anstatt die-Methode zu verwenden.You can also verify the key after processing the document by using the CheckSignatureReturningKey method, instead of using the CheckSignature method. Zur optimalen Sicherheit sollten Sie den Schlüssel jedoch im voraus überprüfen.But, for the optimal security, you should verify the key beforehand.

Versuchen Sie alternativ, die registrierten öffentlichen Schlüssel des Benutzers zu testen, anstatt zu lesen, was <KeyInfo> sich im-Element befindet.Alternately, consider trying the user's registered public keys, rather than reading what's in the <KeyInfo> element.

Sicherheitsüberlegungen zum X509Data-ElementSecurity considerations about the X509Data element

Das optionale <X509Data> -Element ist ein untergeordnetes <KeyInfo> Element des-Elements und enthält mindestens ein x. 509-Zertifikat oder-Bezeichner für X509-Zertifikate.The optional <X509Data> element is a child of the <KeyInfo> element and contains one or more X509 certificates or identifiers for X509 certificates. Die Daten im <X509Data> -Element sollten ebenfalls nicht vertrauenswürdig sein.The data in the <X509Data> element should also not be inherently trusted.

Beim Überprüfen eines Dokuments mit dem <X509Data> eingebetteten Element überprüft .net nur, ob die Daten in ein X509-Zertifikat aufgelöst werden, dessen öffentlicher Schlüssel erfolgreich zum Überprüfen der Dokument Signatur verwendet werden kann.When verifying a document with the embedded <X509Data> element, .NET verifies only that the data resolves to an X509 certificate whose public key can be successfully used to validate the document signature. Im Gegensatz zum CheckSignature Aufrufen der- verifySignatureOnly Methode, bei falseder der-Parameter auf festgelegt ist, wird keine Sperr Überprüfung ausgeführt, keine Ketten Vertrauensstellung aktiviert und kein Ablaufdatum überprüft.Unlike calling the CheckSignature method with the verifySignatureOnly parameter set to false, no revocation check is performed, no chain trust is checked, and no expiration is verified. Auch wenn Ihre Anwendung das Zertifikat selbst extrahiert und an die CheckSignature -Methode übergibt, bei der der verifySignatureOnly - falseParameter auf festgelegt ist, ist die Validierung immer noch nicht ausreichend, um eine Manipulation von Dokumenten zu verhindern.Even if your application extracts the certificate itself and passes it to the CheckSignature method with the verifySignatureOnly parameter set to false, that is still not sufficient validation to prevent document tampering. Das Zertifikat muss dennoch überprüft werden, damit es für das signierte Dokument geeignet ist.The certificate still needs to be verified as being appropriate for the document being signed.

Die Verwendung eines eingebetteten Signatur Zertifikats kann nützliche Schlüssel Rotations Strategien bereitstellen, egal <X509Data> ob im Abschnitt oder im Dokumentinhalt.Using an embedded signing certificate can provide useful key rotation strategies, whether in the <X509Data> section or in the document content. Wenn Sie diesen Ansatz verwenden, sollte eine Anwendung das Zertifikat manuell extrahieren und eine Validierung ähnlich der folgenden ausführen:When using this approach an application should extract the certificate manually and perform validation similar to:

  • Das Zertifikat wurde direkt oder über eine Kette durch eine Zertifizierungsstelle (ca) ausgestellt, deren öffentliches Zertifikat in die Anwendung eingebettet ist.The certificate was issued directly or via a chain by a Certificate Authority (CA) whose public certificate is embedded in the application.

    Die Verwendung der vom Betriebssystem bereitgestellten Vertrauens Liste ohne zusätzliche Überprüfungen, z SignedXml. b. ein bekannter Antragsteller Name, reicht nicht aus, um Manipulationen zu verhindern.Using the OS-provided trust list without additional checks, such as a known subject name, is not sufficient to prevent tampering in SignedXml.

  • Das Zertifikat wird überprüft, dass es zum Zeitpunkt der Dokumenten Signierung (oder "Now" für die Dokument Verarbeitung in Echtzeit) nicht abgelaufen ist.The certificate is verified to have not been expired at the time of document signing (or "now" for near real-time document processing).

  • Vergewissern Sie sich bei langlebigen Zertifikaten, die von einer Zertifizierungsstelle ausgestellt wurden, die die Sperrung unterstützt, dass das Zertifikat nicht gesperrt wurde.For long-lived certificates issued by a CA which supports revocation, verify the certificate was not revoked.

  • Der Zertifikat Antragsteller wird als geeignet für das aktuelle Dokument überprüft.The certificate subject is verified as being appropriate to the current document.

Auswählen des Transformations AlgorithmusChoosing the transform algorithm

Wenn Sie mit einer Spezifikation interagieren, die bestimmte Werte (z. b. XrML) vorgegeben hat, müssen Sie der Spezifikation folgen.If you are interoperating with a specification which has dictated specific values (such as XrML), then you need to follow the specification. Wenn Sie über eine eingeschlossene Signatur verfügen (z. b. beim Signieren des gesamten Dokuments), müssen http://www.w3.org/2000/09/xmldsig#enveloped-signature Sie (dargestellt durch XmlDsigEnvelopedSignatureTransform die-Klasse) verwenden.If you have an enveloped signature (such as when signing the whole document), then you need to use http://www.w3.org/2000/09/xmldsig#enveloped-signature (represented by the XmlDsigEnvelopedSignatureTransform class). Sie können auch die implizite XML-C14N-Transformation angeben, aber es ist nicht erforderlich.You can specify the implicit XML-C14N transform as well, but it's not necessary. Für eine eingehüllte oder getrennte Signatur sind keine Transformationen erforderlich.For an enveloping or detached signature, no transforms are required. Die implizite XML-C14N-Transformation übernimmt alles.The implicit XML-C14N transform takes care of everything.

Mit der durch das Microsoft-Sicherheits Bulletin eingeführten Sicherheit MS16-035hat .net eingeschränkt, welche Transformationen bei der Dokumentenüberprüfung standardmäßig verwendet werden können, wobei nicht vertrauenswürdige CheckSignature Transformationen die Rückgabe falsevon immer bewirken.With the security updated introduced by the Microsoft Security Bulletin MS16-035, .NET has restricted what transforms can be used in document verification by default, with untrusted transforms causing CheckSignature to always return false. Insbesondere sind Transformationen, die zusätzliche Eingaben erfordern (als untergeordnete Elemente in der XML-Datei angegeben), aufgrund ihrer Anfälligkeit durch böswillige Benutzer nicht mehr zulässig.In particular, transforms which require additional input (specified as child elements in the XML) are no longer allowed due to their susceptibility of abuse by malicious users. Das W3C rät dazu, die XPath-und XSLT-Transformationen zu vermeiden. Dies sind die beiden Haupt Transformationen, die von diesen Einschränkungen betroffen sind.The W3C advises avoiding the XPath and XSLT transforms, which are the two main transforms affected by these restrictions.

Das Problem mit externen verweisenThe problem with external references

Wenn eine Anwendung nicht überprüft, ob externe Verweise für den aktuellen Kontext geeignet sind, können Sie auf eine Art und Weise missbraucht werden, die viele Sicherheitsrisiken bietet (einschließlich Denial-of-Service, Denial-of-Service-Denial-of-Service, Informationen Offenlegung, Signatur Umgehung und Remote Code Ausführung).If an application does not verify that external references seem appropriate for the current context, they can be abused in ways that provide for many security vulnerabilities (including Denial of Service, Distributed Reflection Denial of Service, Information Disclosure, Signature Bypass, and Remote Code Execution). Auch wenn eine Anwendung den URI des externen Verweises überprüfen würde, würde es zu einem Problem, dass die Ressource zweimal geladen wird: einmal, wenn Sie von Ihrer Anwendung SignedXml gelesen wird, und einmal, wenn Sie Sie liest.Even if an application were to validate the external reference URI, there would remain a problem of the resource being loaded twice: once when your application reads it, and once when SignedXml reads it. Da es keine Garantie gibt, dass die Schritte zur Überprüfung der Anwendungs Lese-und-Dokumente denselben Inhalt aufweisen, bietet die Signatur keine Vertrauenswürdigkeit.Since there's no guarantee that the application read and document verify steps have the same content, the signature does not provide trustworthiness.

Aufgrund der Risiken externer Verweise löst eine SignedXml Ausnahme aus, wenn ein externer Verweis gefunden wird.Given the risks of external references, SignedXml will throw an exception when an external reference is encountered. Weitere Informationen zu diesem Problem finden Sie im KB-Artikel 3148821.For more information about this issue, see KB article 3148821.

Konstruktoren

SignedXml() SignedXml() SignedXml() SignedXml()

Initialisiert eine neue Instanz der SignedXml-Klasse.Initializes a new instance of the SignedXml class.

SignedXml(XmlDocument) SignedXml(XmlDocument) SignedXml(XmlDocument) SignedXml(XmlDocument)

Initialisiert eine neue Instanz der SignedXml-Klasse aus dem angegebenen XML-Dokument.Initializes a new instance of the SignedXml class from the specified XML document.

SignedXml(XmlElement) SignedXml(XmlElement) SignedXml(XmlElement) SignedXml(XmlElement)

Initialisiert eine neue Instanz der SignedXml-Klasse mit dem angegebenen XmlElement-Objekt.Initializes a new instance of the SignedXml class from the specified XmlElement object.

Felder

m_signature m_signature m_signature m_signature

Stellt das Signature-Objekt des aktuellen SignedXml-Objekts dar.Represents the Signature object of the current SignedXml object.

m_strSigningKeyName m_strSigningKeyName m_strSigningKeyName m_strSigningKeyName

Stellt den Namen des installierten Schlüssels dar, der für die Signierung des SignedXml-Objekts verwendet werden soll.Represents the name of the installed key to be used for signing the SignedXml object.

XmlDecryptionTransformUrl XmlDecryptionTransformUrl XmlDecryptionTransformUrl XmlDecryptionTransformUrl

Stellt den URI (Uniform Resource Identifier) für die Entschlüsselungstransformation im XML-Modus dar.Represents the Uniform Resource Identifier (URI) for the XML mode decryption transformation. Dieses Feld ist konstant.This field is constant.

XmlDsigBase64TransformUrl XmlDsigBase64TransformUrl XmlDsigBase64TransformUrl XmlDsigBase64TransformUrl

Stellt den URI (Uniform Resource Identifier) für die Base-64-Transformation dar.Represents the Uniform Resource Identifier (URI) for the base 64 transformation. Dieses Feld ist konstant.This field is constant.

XmlDsigC14NTransformUrl XmlDsigC14NTransformUrl XmlDsigC14NTransformUrl XmlDsigC14NTransformUrl

Stellt den URI (Uniform Resource Identifier) für die kanonische XML-Transformation dar.Represents the Uniform Resource Identifier (URI) for the Canonical XML transformation. Dieses Feld ist konstant.This field is constant.

XmlDsigC14NWithCommentsTransformUrl XmlDsigC14NWithCommentsTransformUrl XmlDsigC14NWithCommentsTransformUrl XmlDsigC14NWithCommentsTransformUrl

Stellt den URI (Uniform Resource Identifier) für die kanonische XML-Transformation mit Kommentaren dar.Represents the Uniform Resource Identifier (URI) for the Canonical XML transformation, with comments. Dieses Feld ist konstant.This field is constant.

XmlDsigCanonicalizationUrl XmlDsigCanonicalizationUrl XmlDsigCanonicalizationUrl XmlDsigCanonicalizationUrl

Stellt den URI (Uniform Resource Identifier) für den Standardkanonisierungsalgorithmus für digitale XML-Signaturen dar.Represents the Uniform Resource Identifier (URI) for the standard canonicalization algorithm for XML digital signatures. Dieses Feld ist konstant.This field is constant.

XmlDsigCanonicalizationWithCommentsUrl XmlDsigCanonicalizationWithCommentsUrl XmlDsigCanonicalizationWithCommentsUrl XmlDsigCanonicalizationWithCommentsUrl

Stellt den URI (Uniform Resource Identifier) für den Standardkanonisierungsalgorithmus für digitale XML-Signaturen dar und enthält Kommentare.Represents the Uniform Resource Identifier (URI) for the standard canonicalization algorithm for XML digital signatures and includes comments. Dieses Feld ist konstant.This field is constant.

XmlDsigDSAUrl XmlDsigDSAUrl XmlDsigDSAUrl XmlDsigDSAUrl

Stellt den URI (Uniform Resource Identifier) für den Standard-DSA-Algorithmus für digitale XML-Signaturen dar.Represents the Uniform Resource Identifier (URI) for the standard DSA algorithm for XML digital signatures. Dieses Feld ist konstant.This field is constant.

XmlDsigEnvelopedSignatureTransformUrl XmlDsigEnvelopedSignatureTransformUrl XmlDsigEnvelopedSignatureTransformUrl XmlDsigEnvelopedSignatureTransformUrl

Stellt den URI (Uniform Resource Identifier) für die eingeschlossene Signaturtransformation dar.Represents the Uniform Resource Identifier (URI) for enveloped signature transformation. Dieses Feld ist konstant.This field is constant.

XmlDsigExcC14NTransformUrl XmlDsigExcC14NTransformUrl XmlDsigExcC14NTransformUrl XmlDsigExcC14NTransformUrl

Stellt den URI (Uniform Resource Identifier) für die exklusive XML-Kanonisierung dar.Represents the Uniform Resource Identifier (URI) for exclusive XML canonicalization. Dieses Feld ist konstant.This field is constant.

XmlDsigExcC14NWithCommentsTransformUrl XmlDsigExcC14NWithCommentsTransformUrl XmlDsigExcC14NWithCommentsTransformUrl XmlDsigExcC14NWithCommentsTransformUrl

Stellt den URI (Uniform Resource Identifier) für die exklusive XML-Kanonisierung mit Kommentaren dar.Represents the Uniform Resource Identifier (URI) for exclusive XML canonicalization, with comments. Dieses Feld ist konstant.This field is constant.

XmlDsigHMACSHA1Url XmlDsigHMACSHA1Url XmlDsigHMACSHA1Url XmlDsigHMACSHA1Url

Stellt den URI (Uniform Resource Identifier) für den Standard-HMACSHA1-Algorithmus für digitale XML-Signaturen dar.Represents the Uniform Resource Identifier (URI) for the standard HMACSHA1 algorithm for XML digital signatures. Dieses Feld ist konstant.This field is constant.

XmlDsigMinimalCanonicalizationUrl XmlDsigMinimalCanonicalizationUrl XmlDsigMinimalCanonicalizationUrl XmlDsigMinimalCanonicalizationUrl

Stellt den URI (Uniform Resource Identifier) für den Standard-Minimalkanonisierungsalgorithmus für digitale XML-Signaturen dar.Represents the Uniform Resource Identifier (URI) for the standard minimal canonicalization algorithm for XML digital signatures. Dieses Feld ist konstant.This field is constant.

XmlDsigNamespaceUrl XmlDsigNamespaceUrl XmlDsigNamespaceUrl XmlDsigNamespaceUrl

Stellt den URI (Uniform Resource Identifier) für den Standardnamespace für digitale XML-Signaturen dar.Represents the Uniform Resource Identifier (URI) for the standard namespace for XML digital signatures. Dieses Feld ist konstant.This field is constant.

XmlDsigRSASHA1Url XmlDsigRSASHA1Url XmlDsigRSASHA1Url XmlDsigRSASHA1Url

Stellt den URI (Uniform Resource Identifier) für die Standard-RSA-Signaturmethode für digitale XML-Signaturen dar.Represents the Uniform Resource Identifier (URI) for the standard RSA signature method for XML digital signatures. Dieses Feld ist konstant.This field is constant.

XmlDsigRSASHA256Url XmlDsigRSASHA256Url XmlDsigRSASHA256Url XmlDsigRSASHA256Url

Stellt den Uniform Resource Identifier (URI) für die RSA-SHA-256-Signaturmethodenvariation für digitale XML-Signaturen dar.Represents the Uniform Resource Identifier (URI) for the RSA SHA-256 signature method variation for XML digital signatures. Dieses Feld ist konstant.This field is constant.

XmlDsigRSASHA384Url XmlDsigRSASHA384Url XmlDsigRSASHA384Url XmlDsigRSASHA384Url

Stellt den Uniform Resource Identifier (URI) für die RSA-SHA-384-Signaturmethodenvariation für digitale XML-Signaturen dar.Represents the Uniform Resource Identifier (URI) for the RSA SHA-384 signature method variation for XML digital signatures. Dieses Feld ist konstant.This field is constant.

XmlDsigRSASHA512Url XmlDsigRSASHA512Url XmlDsigRSASHA512Url XmlDsigRSASHA512Url

Stellt den Uniform Resource Identifier (URI) für die RSA-SHA-512-Signaturmethodenvariation für digitale XML-Signaturen dar.Represents the Uniform Resource Identifier (URI) for the RSA SHA-512 signature method variation for XML digital signatures. Dieses Feld ist konstant.This field is constant.

XmlDsigSHA1Url XmlDsigSHA1Url XmlDsigSHA1Url XmlDsigSHA1Url

Stellt den Uniform Resource Identifier (URI) für die standardmäßige SHA1-Zusammenfassungsmethode für digitale XML-Signaturen dar.Represents the Uniform Resource Identifier (URI) for the standard SHA1 digest method for XML digital signatures. Dieses Feld ist konstant.This field is constant.

XmlDsigSHA256Url XmlDsigSHA256Url XmlDsigSHA256Url XmlDsigSHA256Url

Stellt den Uniform Resource Identifier (URI) für die standardmäßige SHA256-Zusammenfassungsmethode für digitale XML-Signaturen dar.Represents the Uniform Resource Identifier (URI) for the standard SHA256 digest method for XML digital signatures. Dieses Feld ist konstant.This field is constant.

XmlDsigSHA384Url XmlDsigSHA384Url XmlDsigSHA384Url XmlDsigSHA384Url

Stellt den Uniform Resource Identifier (URI) für die standardmäßige SHA384-Zusammenfassungsmethode für digitale XML-Signaturen dar.Represents the Uniform Resource Identifier (URI) for the standard SHA384 digest method for XML digital signatures. Dieses Feld ist konstant.This field is constant.

XmlDsigSHA512Url XmlDsigSHA512Url XmlDsigSHA512Url XmlDsigSHA512Url

Stellt den Uniform Resource Identifier (URI) für die standardmäßige SHA512-Zusammenfassungsmethode für digitale XML-Signaturen dar.Represents the Uniform Resource Identifier (URI) for the standard SHA512 digest method for XML digital signatures. Dieses Feld ist konstant.This field is constant.

XmlDsigXPathTransformUrl XmlDsigXPathTransformUrl XmlDsigXPathTransformUrl XmlDsigXPathTransformUrl

Stellt den URI (Uniform Resource Identifier) für die XML-Pfadsprache (XPath) dar.Represents the Uniform Resource Identifier (URI) for the XML Path Language (XPath). Dieses Feld ist konstant.This field is constant.

XmlDsigXsltTransformUrl XmlDsigXsltTransformUrl XmlDsigXsltTransformUrl XmlDsigXsltTransformUrl

Stellt den URI (Uniform Resource Identifier) für XSLT-Transformationen dar.Represents the Uniform Resource Identifier (URI) for XSLT transformations. Dieses Feld ist konstant.This field is constant.

XmlLicenseTransformUrl XmlLicenseTransformUrl XmlLicenseTransformUrl XmlLicenseTransformUrl

Stellt den URI (Uniform Resource Identifier) des Lizenztransformationsalgorithmus für die Normalisierung von XrML-Lizenzen für Signaturen dar.Represents the Uniform Resource Identifier (URI) for the license transform algorithm used to normalize XrML licenses for signatures.

Eigenschaften

EncryptedXml EncryptedXml EncryptedXml EncryptedXml

Ruft ein EncryptedXml-Objekt ab, das die XML-Verschlüsselungsverarbeitungsregeln definiert, oder legt dieses fest.Gets or sets an EncryptedXml object that defines the XML encryption processing rules.

KeyInfo KeyInfo KeyInfo KeyInfo

Ruft das KeyInfo-Objekt des aktuellen SignedXml-Objekts ab oder legt dieses fest.Gets or sets the KeyInfo object of the current SignedXml object.

Resolver Resolver Resolver Resolver

Legt das aktuelle XmlResolver-Objekt fest.Sets the current XmlResolver object.

SafeCanonicalizationMethods SafeCanonicalizationMethods SafeCanonicalizationMethods SafeCanonicalizationMethods

Ruft die Namen von Methoden ab, deren Kanonisierungsalgorithmen explizit zugelassen werden.Gets the names of methods whose canonicalization algorithms are explicitly allowed.

Signature Signature Signature Signature

Ruft das Signature-Objekt des aktuellen SignedXml-Objekts ab.Gets the Signature object of the current SignedXml object.

SignatureFormatValidator SignatureFormatValidator SignatureFormatValidator SignatureFormatValidator

Ruft einen Delegaten ab, der aufgerufen wird, um das Format (nicht die kryptografische Sicherheit) einer XML-Signatur zu überprüfen.Gets a delegate that will be called to validate the format (not the cryptographic security) of an XML signature.

SignatureLength SignatureLength SignatureLength SignatureLength

Ruft die Länge der Signatur für das aktuelle SignedXml-Objekt ab.Gets the length of the signature for the current SignedXml object.

SignatureMethod SignatureMethod SignatureMethod SignatureMethod

Ruft die Signaturmethode des aktuellen SignedXml-Objekts ab.Gets the signature method of the current SignedXml object.

SignatureValue SignatureValue SignatureValue SignatureValue

Ruft den Signaturwert des aktuellen SignedXml-Objekts ab.Gets the signature value of the current SignedXml object.

SignedInfo SignedInfo SignedInfo SignedInfo

Ruft das SignedInfo-Objekt des aktuellen SignedXml-Objekts ab.Gets the SignedInfo object of the current SignedXml object.

SigningKey SigningKey SigningKey SigningKey

Ruft den asymmetrischen Algorithmusschlüssel für das Signieren eines SignedXml-Objekts ab oder legt diesen fest.Gets or sets the asymmetric algorithm key used for signing a SignedXml object.

SigningKeyName SigningKeyName SigningKeyName SigningKeyName

Ruft den Namen des installierten Schlüssels für die Signierung des SignedXml-Objekts ab oder legt diesen fest.Gets or sets the name of the installed key to be used for signing the SignedXml object.

Methoden

AddObject(DataObject) AddObject(DataObject) AddObject(DataObject) AddObject(DataObject)

Fügt der Liste der zu signierenden Objekte ein DataObject-Objekt hinzu.Adds a DataObject object to the list of objects to be signed.

AddReference(Reference) AddReference(Reference) AddReference(Reference) AddReference(Reference)

Fügt dem Reference-Objekt, das eine Digest-Methode, einen Digest-Wert und eine Transformation für die Erstellung einer digitalen XML-Signatur beschreibt, ein SignedXml-Objekt hinzu.Adds a Reference object to the SignedXml object that describes a digest method, digest value, and transform to use for creating an XML digital signature.

CheckSignature() CheckSignature() CheckSignature() CheckSignature()

Bestimmt, ob die Signature-Eigenschaft mithilfe des öffentlichen Schlüssels in der Signatur überprüft wird.Determines whether the Signature property verifies using the public key in the signature.

CheckSignature(AsymmetricAlgorithm) CheckSignature(AsymmetricAlgorithm) CheckSignature(AsymmetricAlgorithm) CheckSignature(AsymmetricAlgorithm)

Bestimmt, ob die Signature-Eigenschaft für den angegebenen Schlüssel überprüft wird.Determines whether the Signature property verifies for the specified key.

CheckSignature(KeyedHashAlgorithm) CheckSignature(KeyedHashAlgorithm) CheckSignature(KeyedHashAlgorithm) CheckSignature(KeyedHashAlgorithm)

Bestimmt, ob die Signature-Eigenschaft für den angegebenen MAC-Algorithmus (Message Authentication Code) überprüft wird.Determines whether the Signature property verifies for the specified message authentication code (MAC) algorithm.

CheckSignature(X509Certificate2, Boolean) CheckSignature(X509Certificate2, Boolean) CheckSignature(X509Certificate2, Boolean) CheckSignature(X509Certificate2, Boolean)

Bestimmt, ob die Signature-Eigenschaft für das angegebene X509Certificate2-Objekt überprüft wird und, optional, ob das Zertifikat gültig ist.Determines whether the Signature property verifies for the specified X509Certificate2 object and, optionally, whether the certificate is valid.

CheckSignatureReturningKey(AsymmetricAlgorithm) CheckSignatureReturningKey(AsymmetricAlgorithm) CheckSignatureReturningKey(AsymmetricAlgorithm) CheckSignatureReturningKey(AsymmetricAlgorithm)

Bestimmt, ob die Signature-Eigenschaft mithilfe des öffentlichen Schlüssels in der Signatur überprüft wird.Determines whether the Signature property verifies using the public key in the signature.

ComputeSignature() ComputeSignature() ComputeSignature() ComputeSignature()

Berechnet eine digitale XML-Signatur.Computes an XML digital signature.

ComputeSignature(KeyedHashAlgorithm) ComputeSignature(KeyedHashAlgorithm) ComputeSignature(KeyedHashAlgorithm) ComputeSignature(KeyedHashAlgorithm)

Berechnet eine digitale XML-Signatur mithilfe des angegebenen MAC-Algorithmus (Message Authentication Code).Computes an XML digital signature using the specified message authentication code (MAC) algorithm.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Bestimmt, ob das angegebene Objekt mit dem aktuellen Objekt identisch ist.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Fungiert als Standardhashfunktion.Serves as the default hash function.

(Inherited from Object)
GetIdElement(XmlDocument, String) GetIdElement(XmlDocument, String) GetIdElement(XmlDocument, String) GetIdElement(XmlDocument, String)

Gibt das XmlElement-Objekt mit der angegebenen ID vom angegebenen XmlDocument-Objekt zurück.Returns the XmlElement object with the specified ID from the specified XmlDocument object.

GetPublicKey() GetPublicKey() GetPublicKey() GetPublicKey()

Gibt den öffentlichen Schlüssel einer Signatur zurück.Returns the public key of a signature.

GetType() GetType() GetType() GetType()

Ruft den Type der aktuellen Instanz ab.Gets the Type of the current instance.

(Inherited from Object)
GetXml() GetXml() GetXml() GetXml()

Gibt die XML-Darstellung eines SignedXml-Objekts zurück.Returns the XML representation of a SignedXml object.

LoadXml(XmlElement) LoadXml(XmlElement) LoadXml(XmlElement) LoadXml(XmlElement)

Lädt einen SignedXml-Zustand aus einem XML-Element.Loads a SignedXml state from an XML element.

MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.Returns a string that represents the current object.

(Inherited from Object)

Gilt für:

Siehe auch