KeyInfoX509Data 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
表示 XMLDSIG 或 XML 加密 <KeyInfo>
元素的 <X509Data>
子元素。
public ref class KeyInfoX509Data : System::Security::Cryptography::Xml::KeyInfoClause
public class KeyInfoX509Data : System.Security.Cryptography.Xml.KeyInfoClause
type KeyInfoX509Data = class
inherit KeyInfoClause
Public 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.Security.dll>
#using <System.Xml.dll>
using namespace System;
using namespace System::Security::Cryptography;
using namespace System::Security::Cryptography::Xml;
using namespace System::Security::Cryptography::X509Certificates;
using namespace System::Text;
using namespace System::Xml;
// Sign an XML file and save the signature in a new file.
void SignDetachedResource( String^ URIString, String^ XmlSigFileName, RSA^ Key, String^ Certificate )
{
// Create a SignedXml object.
SignedXml^ signedXml = gcnew SignedXml;
// Assign the key to the SignedXml object.
signedXml->SigningKey = Key;
// Create a reference to be signed.
Reference^ reference = gcnew 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 = gcnew 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( gcnew 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 = gcnew XmlTextWriter( XmlSigFileName,gcnew UTF8Encoding( false ) );
xmlDigitalSignature->WriteTo( xmltw );
xmltw->Close();
}
[STAThread]
int main()
{
array<String^>^args = Environment::GetCommandLineArgs();
// 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 resource and 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 );
}
}
//
// 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.Security.dll>
#using <System.Xml.dll>
using namespace System;
using namespace System::Security::Cryptography;
using namespace System::Security::Cryptography::Xml;
using namespace System::Security::Cryptography::X509Certificates;
using namespace System::Text;
using namespace System::Xml;
// Sign an XML file and save the signature in a new file.
void SignXmlFile( String^ FileName, String^ SignedFileName, RSA^ Key, String^ Certificate )
{
// 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 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 );
// Create a new KeyInfo object.
KeyInfo^ keyInfo = gcnew 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( gcnew 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)->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();
}
// 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()
{
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 );
}
return 0;
}
//
// 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) |