X509SubjectKeyIdentifierExtension Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Определяет строку, указывающую идентификатор ключа субъекта (SKI) для сертификата. Этот класс не наследуется.
public ref class X509SubjectKeyIdentifierExtension sealed : System::Security::Cryptography::X509Certificates::X509Extension
public sealed class X509SubjectKeyIdentifierExtension : System.Security.Cryptography.X509Certificates.X509Extension
type X509SubjectKeyIdentifierExtension = class
inherit X509Extension
Public NotInheritable Class X509SubjectKeyIdentifierExtension
Inherits X509Extension
- Наследование
Примеры
В следующем примере кода показано, как открыть личное хранилище сертификатов пользователя и отобразить сведения о каждом сертификате в хранилище. В этом примере для отображения сведений X509SubjectKeyIdentifierExtension используется класс .
#using <System.dll>
#using <system.security.dll>
using namespace System;
using namespace System::Security::Cryptography;
using namespace System::Security::Cryptography::X509Certificates;
int main()
{
try
{
X509Store^ store = gcnew X509Store( L"MY",StoreLocation::CurrentUser );
store->Open( static_cast<OpenFlags>(OpenFlags::ReadOnly | OpenFlags::OpenExistingOnly) );
X509Certificate2Collection^ collection = dynamic_cast<X509Certificate2Collection^>(store->Certificates);
for ( int i = 0; i < collection->Count; i++ )
{
System::Collections::IEnumerator^ myEnum = collection[ i ]->Extensions->GetEnumerator();
while ( myEnum->MoveNext() )
{
X509Extension^ extension = safe_cast<X509Extension^>(myEnum->Current);
Console::WriteLine( L"{0}({1})", extension->Oid->FriendlyName, extension->Oid->Value );
if ( extension->Oid->FriendlyName == L"Key Usage" )
{
X509KeyUsageExtension^ ext = dynamic_cast<X509KeyUsageExtension^>(extension);
Console::WriteLine( ext->KeyUsages );
}
if ( extension->Oid->FriendlyName == L"Basic Constraints" )
{
X509BasicConstraintsExtension^ ext = dynamic_cast<X509BasicConstraintsExtension^>(extension);
Console::WriteLine( ext->CertificateAuthority );
Console::WriteLine( ext->HasPathLengthConstraint );
Console::WriteLine( ext->PathLengthConstraint );
}
if ( extension->Oid->FriendlyName == L"Subject Key Identifier" )
{
X509SubjectKeyIdentifierExtension^ ext = dynamic_cast<X509SubjectKeyIdentifierExtension^>(extension);
Console::WriteLine( ext->SubjectKeyIdentifier );
}
if ( extension->Oid->FriendlyName == L"Enhanced Key Usage" )
{
X509EnhancedKeyUsageExtension^ ext = dynamic_cast<X509EnhancedKeyUsageExtension^>(extension);
OidCollection^ oids = ext->EnhancedKeyUsages;
System::Collections::IEnumerator^ myEnum1 = oids->GetEnumerator();
while ( myEnum1->MoveNext() )
{
Oid^ oid = safe_cast<Oid^>(myEnum1->Current);
Console::WriteLine( L"{0}({1})", oid->FriendlyName, oid->Value );
}
}
}
}
store->Close();
}
catch ( CryptographicException^ )
{
Console::WriteLine( L"Information could not be written out for this certificate." );
}
}
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
Комментарии
Существует несколько способов идентификации сертификата: по хэшу сертификата, по издателю и серийному номеру, а также по идентификатору ключа субъекта (SKI). SKI предоставляет уникальную идентификацию субъекта сертификата и часто используется при работе с цифровой подписью XML.
Конструкторы
X509SubjectKeyIdentifierExtension() |
Инициализирует новый экземпляр класса X509SubjectKeyIdentifierExtension. |
X509SubjectKeyIdentifierExtension(AsnEncodedData, Boolean) |
Инициализирует новый экземпляр класса X509SubjectKeyIdentifierExtension с помощью закодированных данных и значения, указывающего, является ли расширение критическим. |
X509SubjectKeyIdentifierExtension(Byte[], Boolean) |
Инициализирует новый экземпляр класса X509SubjectKeyIdentifierExtension с помощью массива байтов и значения, указывающего, является ли расширение критическим. |
X509SubjectKeyIdentifierExtension(PublicKey, Boolean) |
Инициализирует новый экземпляр класса X509SubjectKeyIdentifierExtension с помощью открытого ключа и значения, указывающего, является ли расширение критическим. |
X509SubjectKeyIdentifierExtension(PublicKey, X509SubjectKeyIdentifierHashAlgorithm, Boolean) |
Инициализирует новый экземпляр класса X509SubjectKeyIdentifierExtension с помощью открытого ключа, идентификатора алгоритма хэша и значения, указывающего, является ли расширение критическим. |
X509SubjectKeyIdentifierExtension(ReadOnlySpan<Byte>, Boolean) |
Инициализирует новый экземпляр класса X509SubjectKeyIdentifierExtension с помощью диапазона байтов только для чтения и значения, указывающего, является ли расширение критическим. |
X509SubjectKeyIdentifierExtension(String, Boolean) |
Инициализирует новый экземпляр класса X509SubjectKeyIdentifierExtension с помощью строки и значения, указывающего, является ли расширение критическим. |
Свойства
Critical |
Получает логическое значение, определяющее, является ли расширение критическим. (Унаследовано от X509Extension) |
Oid |
Получает или задает значение Oid для объекта AsnEncodedData. (Унаследовано от AsnEncodedData) |
RawData |
Получает или задает данные в кодировке ASN.1, представленные в массиве байтов. (Унаследовано от AsnEncodedData) |
SubjectKeyIdentifier |
Получает строку, представляющую идентификатор ключа субъекта (SKI) для сертификата. |
SubjectKeyIdentifierBytes |
Возвращает значение, содержимое которого представляет идентификатор ключа субъекта (SKI) для сертификата. |
Методы
CopyFrom(AsnEncodedData) |
Создает новый экземпляр класса X509SubjectKeyIdentifierExtension с помощью копирования информации их закодированных данных. |
Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
Format(Boolean) |
Возвращает форматированную версию данных в кодировке ASN.1 в виде строки. (Унаследовано от AsnEncodedData) |
GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
GetType() |
Возвращает объект Type для текущего экземпляра. (Унаследовано от Object) |
MemberwiseClone() |
Создает неполную копию текущего объекта Object. (Унаследовано от Object) |
ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |