Codieren einer CERT_INFO-Struktur
Der Codierungsprozess ist das Gegenteil des Decodierungsprozesses, der unter Decodieren einer CERT_INFO-Struktur beschrieben wird. Mit dem folgenden Verfahren wird beispielsweise einer CERT_INFO-Struktur ein codierter Aussteller hinzugefügt. Sehen Sie sich auch die Abbildung an, die dem Verfahren folgt.
So fügen Sie einer CERT_INFO-Struktur einen codierten Aussteller hinzu
- Erstellen Sie eine Zeichenfolge, die den zu verwendenden Ausstellernamen enthält.
- Erstellen Sie ein Array von CERT_RDN_ATTR-Strukturen , das initialisiert wird, um die richtigen Informationen über die soeben erstellte Ausstellernamenzeichenfolge zu enthalten.
- Erstellen Sie ein Array von CERT_RDN Strukturen, von denen eine die Informationen über das Array von CERT_RDN_ATTR Strukturen enthält, die gerade initialisiert wurden.
- Erstellen Sie eine CERT_NAME_INFO-Struktur mit einem Zeiger auf das Array von CERT_RDN Strukturen, die soeben erstellt wurden.
- Rufen Sie CryptEncodeObject auf, um die Größe des ausgabecodierten BLOB abzurufen, und übergeben Sie ihr die Adresse der CERT_NAME_INFO Struktur, die Sie soeben erstellt haben.
- Weisen Sie Arbeitsspeicher für das ausgabecodierte BLOB zu.
- Rufen Sie CryptEncodeObject erneut auf, übergeben Sie die gleichen Informationen, aber übergeben Sie ihm nun die Adresse des gerade zugewiesenen Arbeitsspeichers.
- Legen Sie das Issuer.cbData-Element der CERT_INFO-Struktur auf die in Schritt 5 zurückgegebene Größe und das Issuer.pbData-Element auf die in Schritt 6 abgerufene Adresse fest. Das codierte Ausstellerblob befindet sich jetzt dort.
Führen Sie zum Initialisieren und Codieren einiger Zertifikaterweiterungsinformationen das folgende Verfahren aus. Sehen Sie sich auch die Abbildung an, die dem Verfahren folgt.
So fügen Sie einer CERT_INFO-Struktur codierte Erweiterungsinformationen hinzu
- Erstellen und Initialisieren einer Erweiterungsinformationsstruktur – in diesem Beispiel handelt es sich um eine CERT_BASIC_CONSTRAINTS_INFO-Struktur .
- Rufen Sie CryptEncodeObject auf, und übergeben Sie ihr die Adresse der gerade erstellten Struktur, um die Größe des ausgabecodierten BLOB abzurufen.
- Weisen Sie Arbeitsspeicher für das ausgabecodierte BLOB zu.
- Rufen Sie CryptEncodeObject erneut auf, und übergeben Sie die gleichen Informationen, außer jetzt übergeben Sie die Adresse des zugeordneten Arbeitsspeichers.
- Erstellen Sie ein Array von CERT_EXTENSION Strukturen.
- Initialisieren Sie eine der CERT_EXTENSION Strukturen, sodass die pszObjId die richtige Zeichenfolge für die in Value enthaltenen Daten ist, und dieser Wert das verschlüsselte Datenblob enthält, das aus dem Aufruf von CryptEncodeObject ausgegeben wurde.
- Initialisieren Sie das rgExtension-Element der CERT_INFO-Struktur , um auf das Array CERT_EXTENSION Strukturen zu verweisen.