X509Extension 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
表示 X509 扩展。
public ref class X509Extension : System::Security::Cryptography::AsnEncodedDatapublic class X509Extension : System.Security.Cryptography.AsnEncodedDatatype X509Extension = class
    inherit AsnEncodedDataPublic Class X509Extension
Inherits AsnEncodedData- 继承
- 派生
示例
下面的代码示例演示如何使用 X509Extension 类。
using System;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
public class CertSelect
{
    public static void Main()
    {
        try
        {
            X509Store store = new X509Store("MY", StoreLocation.CurrentUser);
            store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
            X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates;
            for (int i = 0; i < collection.Count; i++)
            {
                foreach (X509Extension extension in collection[i].Extensions)
                {
                    Console.WriteLine(extension.Oid.FriendlyName + "(" + extension.Oid.Value + ")");
                    if (extension.Oid.FriendlyName == "Key Usage")
                    {
                        X509KeyUsageExtension ext = (X509KeyUsageExtension)extension;
                        Console.WriteLine(ext.KeyUsages);
                    }
                    if (extension.Oid.FriendlyName == "Basic Constraints")
                    {
                        X509BasicConstraintsExtension ext = (X509BasicConstraintsExtension)extension;
                        Console.WriteLine(ext.CertificateAuthority);
                        Console.WriteLine(ext.HasPathLengthConstraint);
                        Console.WriteLine(ext.PathLengthConstraint);
                    }
                    if (extension.Oid.FriendlyName == "Subject Key Identifier")
                    {
                        X509SubjectKeyIdentifierExtension ext = (X509SubjectKeyIdentifierExtension)extension;
                        Console.WriteLine(ext.SubjectKeyIdentifier);
                    }
                    if (extension.Oid.FriendlyName == "Enhanced Key Usage")
                    {
                        X509EnhancedKeyUsageExtension ext = (X509EnhancedKeyUsageExtension)extension;
                        OidCollection oids = ext.EnhancedKeyUsages;
                        foreach (Oid oid in oids)
                        {
                            Console.WriteLine(oid.FriendlyName + "(" + oid.Value + ")");
                        }
                    }
                }
            }
            store.Close();
        }
        catch (CryptographicException)
        {
            Console.WriteLine("Information could not be written out for this certificate.");
        }
    }
}
Imports System.Security.Cryptography
Imports System.Security.Cryptography.X509Certificates
Module CertSelect
    Sub Main()
        Try
            Dim store As New X509Store("MY", StoreLocation.CurrentUser)
            store.Open(OpenFlags.ReadOnly Or OpenFlags.OpenExistingOnly)
            Dim collection As X509Certificate2Collection = CType(store.Certificates, X509Certificate2Collection)
            For i As Integer = 0 To collection.Count - 1
                Dim extension As X509Extension
                For Each extension In collection(i).Extensions
                    Console.WriteLine(extension.Oid.FriendlyName + "(" + extension.Oid.Value + ")")
                    If extension.Oid.FriendlyName = "Key Usage" Then
                        Dim ext As X509KeyUsageExtension = CType(extension, X509KeyUsageExtension)
                        Console.WriteLine(ext.KeyUsages)
                    End If
                    If extension.Oid.FriendlyName = "Basic Constraints" Then
                        Dim ext As X509BasicConstraintsExtension = CType(extension, X509BasicConstraintsExtension)
                        Console.WriteLine(ext.CertificateAuthority)
                        Console.WriteLine(ext.HasPathLengthConstraint)
                        Console.WriteLine(ext.PathLengthConstraint)
                    End If
                    If extension.Oid.FriendlyName = "Subject Key Identifier" Then
                        Dim ext As X509SubjectKeyIdentifierExtension = CType(extension, X509SubjectKeyIdentifierExtension)
                        Console.WriteLine(ext.SubjectKeyIdentifier)
                    End If
                    If extension.Oid.FriendlyName = "Enhanced Key Usage" Then
                        Dim ext As X509EnhancedKeyUsageExtension = CType(extension, X509EnhancedKeyUsageExtension)
                        Dim oids As OidCollection = ext.EnhancedKeyUsages
                        Dim oid As Oid
                        For Each oid In oids
                            Console.WriteLine(oid.FriendlyName + "(" + oid.Value + ")")
                        Next oid
                    End If
                Next extension
            Next i
            store.Close()
        Catch
            Console.WriteLine("Information could not be written out for this certificate.")
        End Try
    End Sub
End Module
注解
X509 扩展是动态扩展属性,可以添加到 X509 证书中并进行更改。 类 X509Extension 可用于创建与证书关联的扩展,但不是证书颁发机构 (CA) 颁发的证书的一部分。
在最基本的形式中,X509 扩展具有对象标识符 (OID) 、描述扩展是否被视为关键扩展的布尔值以及 ASN 编码的数据。 可以在 文件中 CryptoConfig 注册自定义扩展。
The.NET Framework 包括多个常见 X509 扩展的实现:
- X509KeyUsageExtension. 描述证书的密钥用法。 
- X509BasicConstraintsExtension. 描述证书的约束。 
- X509EnhancedKeyUsageExtension. 描述证书的增强密钥用法。 
- X509SubjectKeyIdentifierExtension. 描述密钥标识符。 例如,与 XMLDSIG 一起使用。 
构造函数
| X509Extension() | 初始化 X509Extension 类的新实例。 | 
| X509Extension(AsnEncodedData, Boolean) | 初始化 X509Extension 类的新实例。 | 
| X509Extension(Oid, Byte[], Boolean) | 初始化 X509Extension 类的新实例。 | 
| X509Extension(Oid, ReadOnlySpan<Byte>, Boolean) | 初始化 X509Extension 类的新实例。 | 
| X509Extension(String, Byte[], Boolean) | 初始化 X509Extension 类的新实例。 | 
| X509Extension(String, ReadOnlySpan<Byte>, Boolean) | 初始化 X509Extension 类的新实例。 | 
属性
| Critical | 获取一个指示扩展是否必不可少的布尔值。 | 
| Oid | 获取或设置 Oid 对象的 AsnEncodedData 值。(继承自 AsnEncodedData) | 
| RawData | 获取或设置以字节数组表示的 Abstract Syntax Notation One (ASN.1) 编码数据。(继承自 AsnEncodedData) | 
方法
| CopyFrom(AsnEncodedData) | 复制指定 AsnEncodedData 对象的扩展属性。 | 
| Equals(Object) | 确定指定对象是否等于当前对象。(继承自 Object) | 
| Format(Boolean) | 将 Abstract Syntax Notation One (ASN.1) 编码数据的格式化版本作为字符串返回。(继承自 AsnEncodedData) | 
| GetHashCode() | 作为默认哈希函数。(继承自 Object) | 
| GetType() | 获取当前实例的 Type。(继承自 Object) | 
| MemberwiseClone() | 创建当前 Object 的浅表副本。(继承自 Object) | 
| ToString() | 返回表示当前对象的字符串。(继承自 Object) |