KeyInfoX509Data 类 
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
表示 XMLDSIG 或 XML 加密 <KeyInfo> 元素的 <X509Data> 子元素。
public ref class KeyInfoX509Data : System::Security::Cryptography::Xml::KeyInfoClausepublic class KeyInfoX509Data : System.Security.Cryptography.Xml.KeyInfoClausetype KeyInfoX509Data = class
    inherit KeyInfoClausePublic Class KeyInfoX509Data
Inherits KeyInfoClause- 继承
示例
本部分包含两个代码示例。 第一个示例演示如何使用分离签名对 XML 文件进行签名。 第二个示例演示如何使用信封签名对 XML 文件进行签名。
示例 #1
//
// This example signs a file specified by a URI 
// using a detached signature. It then verifies  
// the signed XML.
//
using System;
using System.Security.Cryptography;
using System.Security.Cryptography.Xml;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Xml;
class XMLDSIGDetached
{
    
    [STAThread]
    static void Main(string[] args)
    {
        // The URI to sign.
        string resourceToSign = "http://www.microsoft.com";
        
        // The name of the file to which to save the XML signature.
        string XmlFileName = "xmldsig.xml";
        // The name of the X509 certificate
        string Certificate = "microsoft.cer";
        try
        {
            // Generate a signing key. This key should match the certificate.
            RSA Key = RSA.Create();
            Console.WriteLine("Signing: {0}", resourceToSign);
            // Sign the detached resourceand save the signature in an XML file.
            SignDetachedResource(resourceToSign, XmlFileName, Key, Certificate);
            Console.WriteLine("XML signature was successfully computed and saved to {0}.", XmlFileName);
        }
        catch(CryptographicException e)
        {
            Console.WriteLine(e.Message);
        }
    }
    // Sign an XML file and save the signature in a new file.
    public static void SignDetachedResource(string URIString, string XmlSigFileName, RSA Key, string Certificate)
    {
        // Create a SignedXml object.
        SignedXml signedXml = new SignedXml();
        // Assign the key to the SignedXml object.
        signedXml.SigningKey = Key;
        // Create a reference to be signed.
        Reference reference = new Reference();
        // Add the passed URI to the reference object.
        reference.Uri = URIString;
        
        // Add the reference to the SignedXml object.
        signedXml.AddReference(reference);
        // Create a new KeyInfo object.
        KeyInfo keyInfo = new KeyInfo();
        // Load the X509 certificate.
        X509Certificate MSCert = X509Certificate.CreateFromCertFile(Certificate);
 
        // Load the certificate into a KeyInfoX509Data object
        // and add it to the KeyInfo object.
        keyInfo.AddClause(new KeyInfoX509Data(MSCert));
  
        // Add the KeyInfo object to the SignedXml object.
        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();
        // Save the signed XML document to a file specified
        // using the passed string.
        XmlTextWriter xmltw = new XmlTextWriter(XmlSigFileName, new UTF8Encoding(false));
        xmlDigitalSignature.WriteTo(xmltw);
        xmltw.Close();
    }
}
'
' This example signs a file specified by a URI 
' using a detached signature. It then verifies  
' the signed XML.
'
Imports System.Security.Cryptography
Imports System.Security.Cryptography.Xml
Imports System.Security.Cryptography.X509Certificates
Imports System.Text
Imports System.Xml
Class XMLDSIGDetached
   
  
   <STAThread()>  _
   Overloads Shared Sub Main(args() As String)
      ' The URI to sign.
      Dim resourceToSign As String = "http://www.microsoft.com"
      
      ' The name of the file to which to save the XML signature.
      Dim XmlFileName As String = "xmldsig.xml"
      
      ' The name of the X509 certificate
      Dim Certificate As String = "microsoft.cer"
      
      Try
         
         ' Generate a signing key. This key should match the 
         ' certificate.
         Dim Key As RSA = RSA.Create()
         
         Console.WriteLine("Signing: {0}", resourceToSign)
         
         ' Sign the detached resourceand save the signature in an XML file.
         SignDetachedResource(resourceToSign, XmlFileName, Key, Certificate)
         
         Console.WriteLine("XML signature was successfully computed and saved to {0}.", XmlFileName)
      
      Catch e As CryptographicException
         Console.WriteLine(e.Message)
      End Try 
   End Sub 
   
   
   
   ' Sign an XML file and save the signature in a new file.
   Public Shared Sub SignDetachedResource(URIString As String, XmlSigFileName As String, Key As RSA, Certificate As String)
      ' Create a SignedXml object.
      Dim signedXml As New SignedXml()
      
      ' Assign the key to the SignedXml object.
      signedXml.SigningKey = Key
      
      ' Create a reference to be signed.
      Dim reference As New Reference()
      
      ' Add the passed URI to the reference object.
      reference.Uri = URIString
      
      ' Add the reference to the SignedXml object.
      signedXml.AddReference(reference)
      
      ' Create a new KeyInfo object.
      Dim keyInfo As New KeyInfo()
      
      ' Load the X509 certificate.
      Dim MSCert As X509Certificate = X509Certificate.CreateFromCertFile(Certificate)
      
      ' Load the certificate into a KeyInfoX509Data object
      ' and add it to the KeyInfo object.
      keyInfo.AddClause(New KeyInfoX509Data(MSCert))
      
      ' Add the KeyInfo object to the SignedXml object.
      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()
      
      ' Save the signed XML document to a file specified
      ' using the passed string.
      Dim xmltw As New XmlTextWriter(XmlSigFileName, New UTF8Encoding(False))
      xmlDigitalSignature.WriteTo(xmltw)
      xmltw.Close()
   End Sub  
End Class
示例 #2
//
// 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.Security.Cryptography.X509Certificates;
using System.Text;
using System.Xml;
public class SignVerifyEnvelope
{
    public static void Main(String[] args)
    {
        string Certificate =  "microsoft.cer";
        try
        {
            // Generate a signing key.
            RSA Key = RSA.Create();
            // 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, Certificate);
            Console.WriteLine("XML file signed."); 
        }
        catch(CryptographicException e)
        {
            Console.WriteLine(e.Message);
        }
    }
    // Sign an XML file and save the signature in a new file.
    public static void SignXmlFile(string FileName, string SignedFileName, RSA Key, string Certificate)
    {
        // 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;
        // 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);
        // Create a new KeyInfo object.
        KeyInfo keyInfo = new KeyInfo();
        // Load the X509 certificate.
        X509Certificate MSCert = X509Certificate.CreateFromCertFile(Certificate);
 
        // Load the certificate into a KeyInfoX509Data object
        // and add it to the KeyInfo object.
        keyInfo.AddClause(new KeyInfoX509Data(MSCert));
  
        // Add the KeyInfo object to the SignedXml object.
        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();
    }
    // 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.Xml
Imports System.Security.Cryptography.X509Certificates
Imports System.Text
Imports System.Xml
Public Class SignVerifyEnvelope
   
   
   Overloads Public Shared Sub Main(args() As [String])
      
      Dim Certificate As String = "microsoft.cer"
      
      Try
         ' Generate a signing key.
         Dim Key As RSA = RSA.Create()
         
         ' 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, Certificate)
         Console.WriteLine("XML file signed.")
      Catch e As CryptographicException
         Console.WriteLine(e.Message)
      End Try
   End Sub 
   
   
   ' Sign an XML file and save the signature in a new file.
   Public Shared Sub SignXmlFile(FileName As String, SignedFileName As String, Key As RSA, Certificate As String)
      ' 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
      
      ' 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)
      
      ' Create a new KeyInfo object.
      Dim keyInfo As New KeyInfo()
      
      ' Load the X509 certificate.
      Dim MSCert As X509Certificate = X509Certificate.CreateFromCertFile(Certificate)
      
      ' Load the certificate into a KeyInfoX509Data object
      ' and add it to the KeyInfo object.
      keyInfo.AddClause(New KeyInfoX509Data(MSCert))
      
      ' Add the KeyInfo object to the SignedXml object.
      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 
   
   
   ' 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
注解
              KeyInfoX509Data类表示<X509Data>包含与验证或加密密钥相关的 X.509v3 证书信息的元素。 例如,元素 <X509Data> 可能包含使用者公钥为验证密钥的 X.509 证书,或 X.509 证书链(在验证密钥的证书中终止)或相关的 X.509 证书的其他标识符。
KeyInfoX509Data每当需要在加密或签名的 XML 文档中包括 X.509 证书数据时,请使用 类。
有关 元素的详细信息 <X509Data> ,请参阅 XMLDSIG 规范 的第 4.4.4 节或 XML 加密规范(可在 W3C 网站上获取)。
构造函数
| KeyInfoX509Data() | 初始化 KeyInfoX509Data 类的新实例。 | 
| KeyInfoX509Data(Byte[]) | 从 X.509v3 证书的指定 ASN.1 DER 编码初始化 KeyInfoX509Data 类的新实例。 | 
| KeyInfoX509Data(X509Certificate, X509IncludeOption) | 从指定的 X.509v3 证书初始化 KeyInfoX509Data 类的新实例。 | 
| KeyInfoX509Data(X509Certificate) | 从指定的 X.509v3 证书初始化 KeyInfoX509Data 类的新实例。 | 
属性
| Certificates | 获取包含在 KeyInfoX509Data 对象中的 X.509v3 证书的列表。 | 
| CRL | 获取或设置包含在 KeyInfoX509Data 对象中的证书吊销列表 (CRL)。 | 
| IssuerSerials | 获取表示颁发者名称和序列号对的 X509IssuerSerial 结构的列表。 | 
| SubjectKeyIds | 获取包含在 KeyInfoX509Data 对象中的使用者密钥标识符 (SKI) 的列表。 | 
| SubjectNames | 获取包含在 KeyInfoX509Data 对象中的实体主题名称的列表。 | 
方法
| AddCertificate(X509Certificate) | 将指定的 X.509v3 证书添加到 KeyInfoX509Data。 | 
| AddIssuerSerial(String, String) | 将指定的颁发者名称和序列号对添加到 KeyInfoX509Data 对象中。 | 
| AddSubjectKeyId(Byte[]) | 将指定的使用者密钥标识符 (SKI) 字节数组添加到 KeyInfoX509Data 对象中。 | 
| AddSubjectKeyId(String) | 将指定的使用者密钥标识符 (SKI) 字符串添加到 KeyInfoX509Data 对象中。 | 
| AddSubjectName(String) | 将被颁发了 X.509v3 证书的实体的主题名称添加到 KeyInfoX509Data 对象中。 | 
| Equals(Object) | 确定指定对象是否等于当前对象。(继承自 Object) | 
| GetHashCode() | 作为默认哈希函数。(继承自 Object) | 
| GetType() | 获取当前实例的 Type。(继承自 Object) | 
| GetXml() | 返回 KeyInfoX509Data 对象的 XML 表示形式。 | 
| LoadXml(XmlElement) | 分析输入的 XmlElement 对象并配置要匹配的 KeyInfoX509Data 对象的内部状态。 | 
| MemberwiseClone() | 创建当前 Object 的浅表副本。(继承自 Object) | 
| ToString() | 返回表示当前对象的字符串。(继承自 Object) |