Überprüfen signierter Nachrichten mithilfe von CTLs
Einer der Vorteile der Verwendung von Zertifikatvertrauenslisten (Certificate Trust Lists , CTLs) besteht darin, dass Anwendungen entwickelt werden können, die signierte Nachrichten automatisch mit vertrauenswürdigen Zertifikaten überprüfen können, ohne den Benutzer mit Dialogfeldern zu stören. Außerdem erhalten sie eine vertrauenswürdige Quelle für die Steuerung eines Netzwerkadministrators.
Das folgende Verfahren kann verwendet werden, um die Signatur einer signierten Nachricht mithilfe einer CTL zu überprüfen.
So überprüfen Sie eine signierte Nachricht mithilfe einer CTL
Decodieren Sie die Nachricht wie folgt:
- Rufen Sie einen Zeiger auf die empfangene Nachricht (das codierte BLOB) ab.
- Rufen Sie CryptMsgOpenToDecode auf, und übergeben Sie die erforderlichen Argumente.
- Rufen Sie CryptMsgUpdate einmal auf, und übergeben Sie das in Schritt b abgerufene Handle und einen Zeiger auf die Daten, die decodiert werden sollen. Dies bewirkt, dass die entsprechenden Aktionen für die Nachricht ausgeführt werden, je nach Nachrichtentyp.
Überprüfen Sie die Signatur der decodierten, signierten Nachricht, und rufen Sie einen Zeiger auf die CERT_CONTEXT des Unterzeichners ab.
Dazu können Sie CryptMsgGetAndVerifySigner aufrufen und das in Schritt 1c abgerufene Nachrichtenhandle als hCryptMsg-Parameter übergeben. Wenn der Funktionsaufruf TRUE zurückgibt, wurde die Signatur überprüft, und ein Zeiger auf die PCCERT_CONTEXT des Unterzeichners wird im ppSigner-Parameter zurückgegeben.
Vergewissern Sie sich wie folgt, dass der Signierer eine vertrauenswürdige Quelle ist:
- Öffnen Sie den Zertifikatspeicher mit der entsprechenden CTL.
- Rufen Sie CertFindCTLInStore auf, um einen Zeiger auf die CTL_CONTEXT abzurufen.
- Um zu bestätigen, dass der Signierer eine vertrauenswürdige Quelle ist, rufen Sie CertFindSubjectInCTL auf, und übergeben Sie den im vorherigen Schritt im pCtlContext-Parameter abgerufenen Zeiger, CTL_CERT_SUBJECT_TYPE im dwSubjectType-Parameter und den Zeiger auf die in Schritt 2 im pvSubject-Parameter abgerufene CERT_CONTEXT. Wenn der Funktionsaufruf TRUE zurückgibt, ist die an die Funktion übergebene CERT_CONTEXT eine vertrauenswürdige Quelle in der CTL.