Freigeben über


Decodieren einer CERT_INFO-Struktur

Bei einem Zertifikat besteht der erste Schritt beim Decodieren des Zertifikat-BLOB darin, CertCreateCertificateContext aufzurufen und einen Zeiger auf das codierte Zertifikat (BLOB) zu übergeben. Wenn diese Funktion aufgerufen wird, erstellt sie ein Duplikat des codierten Zertifikats, erstellt eine Struktur vom Typ CERT_CONTEXT und erstellt eine Struktur vom Typ CERT_INFO. Wie in der folgenden Abbildung gezeigt, enthält ein Zertifikatkontext das ursprüngliche Zertifikat-BLOB, eine C-Struktur vom Typ CERT_CONTEXT und eine C-Struktur vom Typ CERT_INFO. Eines der Member der CERT_CONTEXT-Struktur verweist auf die CERT_INFO-Struktur und ein weiteres auf das codierte Zertifikatblob.

Zertifikatkontext

Das codierte Objekt (Datenmember) wird immer als Eingabe für die CryptDecodeObject-Funktion bereitgestellt, und die Ausgabe ist eine C-Struktur, die abhängig davon, wie weit Sie sich im Prozess befinden, über codierte Member verfügen oder nicht.

Es gibt ein weiteres Element, das eine Decodierung erfordert, und das ist der Erweiterungsmember . Obwohl sie nicht auf CERT_INFO-Ebene codiert ist, enthält sie einige codierte Informationen. Um diese Informationen zu decodieren, fahren Sie wie in der folgenden Abbildung gezeigt fort.

Decodierungsinformationen

In der CERT_INFO-Struktur ist member rgExtension ein Zeiger auf ein Array von CERT_EXTENSION Strukturen. Jede CERT_EXTENSION-Struktur verfügt über einen Value-Member , der sich in codierter Form befindet und decodiert werden muss. Das Value-Element wird an die CryptDecodeObject-Funktion übergeben, und die Ausgabe der Funktion hängt dann vom Wert des pszObjId-Elements ab. Beachten Sie, dass in der Abbildung je nach Wert von pszObjId zwei verschiedene Strukturen erstellt werden, eine vom Typ CERT_BASIC_CONSTRAINTS_INFO und eine vom Typ CERT_AUTHORITY_KEY_ID_INFO.