X509IssuerSerial.IssuerName 属性   
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取或设置 X.509 证书颁发者的可分辨名称。
public:
 property System::String ^ IssuerName { System::String ^ get(); void set(System::String ^ value); };public string IssuerName { get; set; }member this.IssuerName : string with get, setPublic Property IssuerName As String属性值
一个 X.509 证书颁发者的识别名。
示例
下面的代码示例演示如何使用证书存储中的 X.509 证书对 XML 文档进行签名和验证。 此示例使用 X509IssuerSerial 对象将关键信息保存到已签名的文档。
//
// This example signs an XML file using an
// envelope signature. It then verifies the 
// signed XML.
//
// You must have a certificate with a subject name
// of "CN=XMLDSIG_Test" in the "My" certificate store. 
//
// Run the following command to create a certificate
// and place it in the store.
// makecert -r -pe -n "CN=XMLDSIG_Test" -b 01/01/2005 -e 01/01/2010 -sky signing -ss my
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 = "CN=XMLDSIG_Test";
        try
        {
            // 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", Certificate);
            Console.WriteLine("XML file signed.");
            if (VerifyXmlFile("SignedExample.xml", Certificate))
            {
                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.
    public static void SignXmlFile(string FileName, string SignedFileName, string SubjectName)
    {
        if (null == FileName)
            throw new ArgumentNullException("FileName");
        if (null == SignedFileName)
            throw new ArgumentNullException("SignedFileName");
        if (null == SubjectName)
            throw new ArgumentNullException("SubjectName");
        // Load the certificate from the certificate store.
        X509Certificate2 cert = GetCertificateBySubject(SubjectName);
        // 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 = cert.GetRSAPrivateKey();
        // 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 certificate into a KeyInfoX509Data object
        // and add it to the KeyInfo object.
        // Create an X509IssuerSerial object and add it to the
        // KeyInfoX509Data object.
        
        KeyInfoX509Data kdata = new KeyInfoX509Data(cert);
        X509IssuerSerial xserial;
        xserial.IssuerName = cert.IssuerName.ToString();
        xserial.SerialNumber = cert.SerialNumber;
        kdata.AddIssuerSerial(xserial.IssuerName, xserial.SerialNumber);
        keyInfo.AddClause(kdata);
        // 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.
        using (XmlTextWriter xmltw = new XmlTextWriter(SignedFileName, new UTF8Encoding(false)))
        {
            doc.WriteTo(xmltw);
            xmltw.Close();
        }
    }
    // Verify the signature of an XML file against an asymmetric 
    // algorithm and return the result.
    public static Boolean VerifyXmlFile(String FileName, String CertificateSubject)
    {
        // Check the args.
        if (null == FileName)
            throw new ArgumentNullException("FileName");
        if (null == CertificateSubject)
            throw new ArgumentNullException("CertificateSubject");
        // Load the certificate from the store.
        X509Certificate2 cert = GetCertificateBySubject(CertificateSubject);
        // Create a new XML document.
        XmlDocument xmlDocument = new XmlDocument();
        // Load the passed XML file into the document. 
        xmlDocument.Load(FileName);
        // 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(cert, true);
    }
    public static X509Certificate2 GetCertificateBySubject(string CertificateSubject)
    {
        // Check the args.
        if (null == CertificateSubject)
            throw new ArgumentNullException("CertificateSubject");
        // Load the certificate from the certificate store.
        X509Certificate2 cert = null;
        X509Store store = new X509Store("My", StoreLocation.CurrentUser);
        try
        {
            // Open the store.
            store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
            // Get the certs from the store.
            X509Certificate2Collection CertCol = store.Certificates;
            // Find the certificate with the specified subject.
            foreach (X509Certificate2 c in CertCol)
            {
                if (c.Subject == CertificateSubject)
                {
                    cert = c;
                    break;
                }
            }
            // Throw an exception of the certificate was not found.
            if (cert == null)
            {
                throw new CryptographicException("The certificate could not be found.");
            }
        }
        finally
        {
            // Close the store even if an exception was thrown.
            store.Close();
        }
        
        return cert;
    }
    // Create example data to sign.
    public static void CreateSomeXml(string FileName)
    {
        // Check the args.
        if (null == FileName)
            throw new ArgumentNullException("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.
        using (XmlTextWriter xmltw = new XmlTextWriter(FileName, new UTF8Encoding(false)))
        {
            document.WriteTo(xmltw);
            xmltw.Close();
        }
    }
}
// This code example displays the following to the console:
//
// New XML file created.
// XML file signed.
// The XML signature is valid.
'
' This example signs an XML file using an
' envelope signature. It then verifies the 
' signed XML.
'
' You must have a certificate with a subject name
' of "CN=XMLDSIG_Test" in the "My" certificate store. 
'
' Run the following command to create a certificate
' and place it in the store.
' makecert -r -pe -n "CN=XMLDSIG_Test" -b 01/01/2005 -e 01/01/2010 -sky signing -ss my
Imports System.Security.Cryptography
Imports System.Security.Cryptography.Xml
Imports System.Security.Cryptography.X509Certificates
Imports System.Text
Imports System.Xml
Module SignVerifyEnvelope
    Sub Main(ByVal args() As String)
        Dim Certificate As String = "CN=XMLDSIG_Test"
        Try
            ' 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", Certificate)
            Console.WriteLine("XML file signed.")
            If VerifyXmlFile("SignedExample.xml", Certificate) 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.
    Sub SignXmlFile(ByVal FileName As String, ByVal SignedFileName As String, ByVal SubjectName As String)
        If Nothing = FileName Then
            Throw New ArgumentNullException("FileName")
        End If
        If Nothing = SignedFileName Then
            Throw New ArgumentNullException("SignedFileName")
        End If
        If Nothing = SubjectName Then
            Throw New ArgumentNullException("SubjectName")
        End If
        ' Load the certificate from the certificate store.
        Dim cert As X509Certificate2 = GetCertificateBySubject(SubjectName)
        ' 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 = cert.GetRSAPrivateKey()
        ' 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 certificate into a KeyInfoX509Data object
        ' and add it to the KeyInfo object.
        ' Create an X509IssuerSerial object and add it to the
        ' KeyInfoX509Data object.
        Dim kdata As New KeyInfoX509Data(cert)
        Dim xserial As X509IssuerSerial
        xserial.IssuerName = cert.IssuerName.ToString()
        xserial.SerialNumber = cert.SerialNumber
        kdata.AddIssuerSerial(xserial.IssuerName, xserial.SerialNumber)
        keyInfo.AddClause(kdata)
        ' 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))
        Try
            doc.WriteTo(xmltw)
        Finally
            xmltw.Close()
        End Try
    End Sub
    ' Verify the signature of an XML file against an asymmetric 
    ' algorithm and return the result.
    Function VerifyXmlFile(ByVal FileName As String, ByVal CertificateSubject As String) As [Boolean]
        ' Check the args.
        If Nothing = FileName Then
            Throw New ArgumentNullException("FileName")
        End If
        If Nothing = CertificateSubject Then
            Throw New ArgumentNullException("CertificateSubject")
        End If
        ' Load the certificate from the store.
        Dim cert As X509Certificate2 = GetCertificateBySubject(CertificateSubject)
        ' Create a new XML document.
        Dim xmlDocument As New XmlDocument()
        ' Load the passed XML file into the document. 
        xmlDocument.Load(FileName)
        ' 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(cert, True)
    End Function
    Function GetCertificateBySubject(ByVal CertificateSubject As String) As X509Certificate2
        ' Check the args.
        If Nothing = CertificateSubject Then
            Throw New ArgumentNullException("CertificateSubject")
        End If
        ' Load the certificate from the certificate store.
        Dim cert As X509Certificate2 = Nothing
        Dim store As New X509Store("My", StoreLocation.CurrentUser)
        Try
            ' Open the store.
            store.Open(OpenFlags.ReadOnly Or OpenFlags.OpenExistingOnly)
            ' Get the certs from the store.
            Dim CertCol As X509Certificate2Collection = store.Certificates
            ' Find the certificate with the specified subject.
            Dim c As X509Certificate2
            For Each c In CertCol
                If c.Subject = CertificateSubject Then
                    cert = c
                    Exit For
                End If
            Next c
            ' Throw an exception of the certificate was not found.
            If cert Is Nothing Then
                Throw New CryptographicException("The certificate could not be found.")
            End If
        Finally
            ' Close the store even if an exception was thrown.
            store.Close()
        End Try
        Return cert
    End Function
    ' Create example data to sign.
    Sub CreateSomeXml(ByVal FileName As String)
        ' Check the args.
        If Nothing = FileName Then
            Throw New ArgumentNullException("FileName")
        End If
        ' 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))
        Try
            document.WriteTo(xmltw)
        Finally
            xmltw.Close()
        End Try
    End Sub
End Module
' This code example displays the following to the console:
'
' New XML file created.
' XML file signed.
' The XML signature is valid.
注解
属性 IssuerName 表示在 元素中指定的 <X509IssuerSerial> X.509 证书颁发者的可分辨名称。
有关 元素的详细信息 <X509IssuerSerial> ,请参阅 万维网联盟 (W3C) 规范。