Udostępnij przez


Programy obsługi rozszerzeń

Począwszy od X.509 w wersji 3, certyfikat może zawierać rozszerzenia certyfikatu. (Aby uzyskać informacje o zawartości certyfikatu X.509, zobacz właściwości certyfikatu). Te rozszerzenia wskazują dodatkowe informacje. Na przykład rozszerzenie może wskazywać dodatkowe informacje identyfikacyjne podmiotu lub może wskazywać informacje o użyciu klucza, które określają zadania (takie jak podpis lub szyfrowanie), dla których można użyć klucza. Zestaw standardowych rozszerzeń jest definiowany do użytku przez aplikację, a rozszerzenia mogą być również dostosowane.

Każde rozszerzenie ma skojarzony ciąg identyfikatora obiektu, który identyfikuje typ dodatkowych informacji i strukturę danych zawierającą te informacje. Na przykład identyfikator obiektu użycia klucza to "2.5.29.15", który wskazuje informacje o użyciu klucza. Skojarzona z nią struktura danych to CRYPT_BIT_BLOB (bitfield) określający sposób użycia klucza.

Rozszerzenie można dodać do certyfikatu przed jego wystawieniem. Po wystawieniu certyfikatu wszystkie włączone rozszerzenia są częścią certyfikatu. Jeśli rozszerzenie jest oznaczone jako krytyczne, jego użycie musi być znane przez aplikację używającą, a aplikacja musi być zgodna z intencją lub wartością rozszerzenia. Usługi certyfikatów umożliwiają ustawianie rozszerzeń na nieo wystawionym certyfikacie za pomocą metod udostępnianych przez ICertAdmin i ICertServerPolicy. Aby uzyskać szczegółowe informacje na temat rozszerzeń certyfikatów, zobacz CERT_EXTENSION w dokumentacji interfejsu CryptoAPI. Aby uzyskać informacje o typowych strukturach danych rozszerzenia certyfikatu, zobacz X.509 Certificate Extension Structures.

Procedura obsługi rozszerzeń jest obiektem COM, który zapewnia procedury kodowania bardziej złożone, ale często używane rozszerzenia i typy danych, takie jak IA5String lub PrintableString.

Rozszerzenia z typami danych DATE, LONGi BSTR nie wymagają programu obsługi rozszerzeń. Moduł zasad po prostu wywołuje ICertServerPolicy::SetCertificateExtension z parametrem Type ustawioną na wartość reprezentującą typ danych rozszerzenia: PROPTYPE_DATE, PROPTYPE_LONG lub PROPTYPE_STRING. Następnie przekazuje rozszerzenie do aparatu serwera. Aparat serwera wykonuje z kolei kodowanie Abstract Syntax Notation One (ASN.1) przed zapisaniem rozszerzenia w certyfikacie.

Jednak rozszerzenia, które mają typy danych inne niż te typy domyślne, muszą być kodowane przez program obsługi rozszerzeń przed przekazaniem ich do aparatu serwera przez moduł zasad. Gdy moduł zasad wywołuje ICertServerPolicy::SetCertificateExtension przekazać rozszerzenie zakodowane w formacie ASN.1 do aparatu serwera, musi ustawić parametr Type na PROPTYPE_BINARY. Aparat serwera po prostu przechowuje to zakodowane rozszerzenie w certyfikacie.

Domyślna procedura obsługi rozszerzeń, Certenc.dll, eksportuje wiele interfejsów ICertEncodeXXX i może być wywoływana przez moduł zasad. Niezbędne informacje o typie znajdują się również w Certencl.dll, które są dostarczane w zestawie Sdk (Platform Software Development Kit). Każdy interfejs udostępnia metodę Kodowanie, która zwraca rozszerzenie certyfikatu zakodowanego w formacie ASN.1 do modułu zasad w formacie binarnym. Moduł zasad może następnie ustawić rozszerzenie w certyfikacie, wywołując metodę ICertServerPolicy::SetCertificateExtension.

Aby uzyskać więcej informacji, zobacz Pisanie niestandardowych programów obsługi rozszerzeń.