X509Extension Class
Represents an X509 extension.
Assembly: System (in System.dll)
System.Security.Cryptography::AsnEncodedData
System.Security.Cryptography.X509Certificates::X509Extension
System.Security.Cryptography.X509Certificates::X509BasicConstraintsExtension
System.Security.Cryptography.X509Certificates::X509EnhancedKeyUsageExtension
System.Security.Cryptography.X509Certificates::X509KeyUsageExtension
System.Security.Cryptography.X509Certificates::X509SubjectKeyIdentifierExtension
| Name | Description | |
|---|---|---|
![]() | X509Extension() | Initializes a new instance of the X509Extension class. |
![]() | X509Extension(AsnEncodedData^, Boolean) | Initializes a new instance of the X509Extension class. |
![]() | X509Extension(Oid^, array<Byte>^, Boolean) | Initializes a new instance of the X509Extension class. |
![]() | X509Extension(String^, array<Byte>^, Boolean) | Initializes a new instance of the X509Extension class. |
| Name | Description | |
|---|---|---|
![]() | Critical | Gets a Boolean value indicating whether the extension is critical. |
![]() | Oid | Gets or sets the Oid value for an AsnEncodedData object.(Inherited from AsnEncodedData.) |
![]() | RawData | Gets or sets the Abstract Syntax Notation One (ASN.1)-encoded data represented in a byte array.(Inherited from AsnEncodedData.) |
| Name | Description | |
|---|---|---|
![]() | CopyFrom(AsnEncodedData^) | Copies the extension properties of the specified AsnEncodedData object.(Overrides AsnEncodedData::CopyFrom(AsnEncodedData^).) |
![]() | Equals(Object^) | Determines whether the specified object is equal to the current object.(Inherited from Object.) |
![]() | Finalize() | Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.(Inherited from Object.) |
![]() | Format(Boolean) | Returns a formatted version of the Abstract Syntax Notation One (ASN.1)-encoded data as a string.(Inherited from AsnEncodedData.) |
![]() | GetHashCode() | Serves as the default hash function. (Inherited from Object.) |
![]() | GetType() | |
![]() | MemberwiseClone() | |
![]() | ToString() | Returns a string that represents the current object.(Inherited from Object.) |
X509 extensions are dynamic, extended properties that can be added to an X509 certificate and changed. The X509Extension class can be used to create extensions that are associated with a certificate but are not part of a certificate as issued by a certification authority (CA).
In its most basic form, an X509 extension has an object identifier (OID), a Boolean value describing whether the extension is considered critical or not, and ASN-encoded data. Custom extensions can be registered in a CryptoConfig file.
The.NET Framework includes implementations of several common X509 extensions:
X509KeyUsageExtension. Describes the key usages of a certificate.
X509BasicConstraintsExtension. Describes the constraints for a certificate.
X509EnhancedKeyUsageExtension. Describes the enhanced key usages of a certificate.
X509SubjectKeyIdentifierExtension. Describes the key identifier. For example, used with XMLDSIG.
The following code example demonstrates using the X509Extension class.
#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." ); } }
Available since 2.0
Any public static ( Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.


