X509Extension 类

定义

表示 X509 扩展。

public ref class X509Extension : System::Security::Cryptography::AsnEncodedData
public class X509Extension : System.Security.Cryptography.AsnEncodedData
type X509Extension = class
    inherit AsnEncodedData
Public Class X509Extension
Inherits AsnEncodedData
继承
X509Extension
派生

示例

下面的代码示例演示如何使用该 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 自定义扩展。

该.NET框架包括多个常见 X509 扩展的实现:

构造函数

名称 说明
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

获取或设置字节数组中表示的抽象语法表示法一(ASN.1)编码的数据。

(继承自 AsnEncodedData)

方法

名称 说明
CopyFrom(AsnEncodedData)

复制指定 AsnEncodedData 对象的扩展属性。

Equals(Object)

确定指定的对象是否等于当前对象。

(继承自 Object)
Format(Boolean)

以字符串形式返回抽象语法表示法一(ASN.1)编码数据的格式化版本。

(继承自 AsnEncodedData)
GetHashCode()

用作默认哈希函数。

(继承自 Object)
GetType()

获取当前实例的 Type

(继承自 Object)
MemberwiseClone()

创建当前 Object的浅表副本。

(继承自 Object)
ToString()

返回一个表示当前对象的字符串。

(继承自 Object)

适用于