Codieren und Decodieren eines Zertifikatkontexts
CryptoAPI unterstützt die Codierung und Decodierung von Zertifikaten. CryptoAPI umfasst ein umfangreiches, flexibles System von Funktionen und C-Strukturen, die die Codierung und Decodierung auf verschiedene Weise ermöglichen. CryptoAPI unterstützt standardmäßige X.509-Zertifikatstruktur und ASN.1-Codierung ( Abstract Syntax Notation One ), um Die Interoperabilität mit anderen Systemen zu gewährleisten.
Eine Übersicht über codierte Daten finden Sie unter Codierte und decodierte Daten.
Zertifikatkontexte
Ein ZertifikatkontextCERT_CONTEXT ist eine C-Struktur, die ein codiertes Element, ein Handle zu einem Zertifikatspeicher, einen Zeiger auf das ursprüngliche codierte Zertifikatblob und einen Zeiger auf eine CERT_INFO C-Struktur enthält.
Die CERT_INFO-Struktur ist das Herzstück des Zertifikats. Sie enthält in direkter Form und in codierter Form alle grundlegenden Informationen im Zertifikat. Die folgende Abbildung zeigt die CERT_INFO-Struktur , in der alle codierten Member als schattiert angezeigt werden.
Die Member IssuerUniqueID und SubjectUniqueID sind Teil der X.509 Version 2-Zertifikatimplementierung, werden jedoch selten verwendet. Zertifikaterweiterungen in Version 3 ersetzen die Funktionalität dieser Member.
Wenn die in den codierten (schattierten) Membern Issuer und Subject enthaltenen Informationen benötigt werden, müssen diese Member decodiert werden. Verwenden Sie CryptDecodeObject , um diese Member zu decodieren. Die folgende Abbildung zeigt den Prozess der Decodierung eines dieser Member.
Im dargestellten Fall erstellt die CryptDecodeObject-Funktion eine CERT_NAME_INFO-Struktur , ein Array von CERT_RDN-Strukturen , ein entsprechendes Array von CERT_RDN_ATTR-Strukturen und eine Zeichenfolge, die den Namen enthält. Member der CERT_RDN_ATTR-Struktur bestimmen den Inhalt der Zeichenfolge. Wenn das pszObjId-Element beispielsweise 2.5.4.3 ist, enthält die Zeichenfolge einen allgemeinen Namen. Wenn es 2.5.4.10 ist, enthält die Zeichenfolge einen organization Namen. Eine Liste dieser Objektbezeichner (OIDs) finden Sie unter CERT_RDN_ATTR.
Das dwValueType-Element enthält Informationen zum Typ der Zeichenfolge. Wenn es sich um CERT_RDN_PRINTABLE_STRING handelt, enthält der Wertmember eine Zeichenfolge mit Bytebreite und Zeichenfolge mit 0-Endung. Wenn es CERT_RDN_UNICODE_STRING ist, ist die Zeichenfolge eine Zeichenfolge mit doppelter Breite (Wortgröße).
Einen ausführlichen Prozess zum Codieren und Decodieren von Zertifikaten finden Sie unter Codieren einer CERT_INFO-Struktur und Decodieren einer CERT_INFO-Struktur.