CertVerifyCTLUsage-Funktion (wincrypt.h)
Die CertVerifyCTLUsage-Funktion überprüft, ob ein Antragsteller für eine bestimmte Verwendung vertrauenswürdig ist, indem eine signierte und zeitgültige Zertifikatvertrauensliste (Certificate Trust List , CTL) mit den Verwendungsbezeichnern gesucht wird, die den Antragsteller enthalten. Der Antragsteller eines Zertifikats kann entweder durch seinen Zertifikatkontext oder einen eindeutigen Bezeichner wie den SHA1-Hash des Zertifikats des Antragstellers identifiziert werden.
Syntax
BOOL CertVerifyCTLUsage(
[in] DWORD dwEncodingType,
[in] DWORD dwSubjectType,
[in] void *pvSubject,
[in] PCTL_USAGE pSubjectUsage,
[in] DWORD dwFlags,
[in, optional] PCTL_VERIFY_USAGE_PARA pVerifyUsagePara,
[in, out] PCTL_VERIFY_USAGE_STATUS pVerifyUsageStatus
);
Parameter
[in] dwEncodingType
Gibt den verwendeten Codierungstyp an. Derzeit werden nur X509_ASN_ENCODING und PKCS_7_ASN_ENCODING verwendet. In Zukunft können jedoch weitere Codierungstypen hinzugefügt werden. Verwenden Sie für einen der aktuellen Codierungstypen
X509_ASN_ENCODING | PKCS_7_ASN_ENCODING.
[in] dwSubjectType
Wenn der dwSubjectType-Parameter auf CTL_CERT_SUBJECT_TYPE festgelegt ist, zeigt pvSubject auf eine CERT_CONTEXT-Struktur . Das SubjectAlgorithm-Element der Struktur wird untersucht, um die Darstellung der Identität des Antragstellers zu bestimmen. Anfänglich werden nur SHA1- und MD5-Hashes als Werte für SubjectAlgorithm unterstützt. Die entsprechende Hasheigenschaft wird aus der CERT_CONTEXT-Struktur abgerufen.
Wenn der dwSubjectType-Parameter auf CTL_ANY_SUBJECT_TYPE festgelegt ist, zeigt pvSubject auf die CTL_ANY_SUBJECT_INFO-Struktur . Der SubjectAlgorithm-Member dieser Struktur muss mit dem Algorithmustyp der CTL übereinstimmen, und das SubjectIdentifier-Element muss mit einem der CTL-Einträge übereinstimmen.
Wenn dwSubjectType auf einen der vorherigen Werte festgelegt ist, wird dwEncodingType nicht verwendet.
[in] pvSubject
Wert, der in Verbindung mit dem dwSubjectType-Parameter verwendet wird.
[in] pSubjectUsage
Ein Zeiger auf eine CTL_USAGE Struktur, die verwendet wird, um die beabsichtigte Verwendung des Betreffs anzugeben.
[in] dwFlags
Wenn der CERT_VERIFY_INHIBIT_CTL_UPDATE_FLAG nicht festgelegt ist, kann eine CTL ersetzt werden, deren Uhrzeit in einem der von rghCtlStore in CTL_VERIFY_USAGE_PARA angegebenen Speicher nicht mehr gültig ist. Wenn er ersetzt wird, wird die CERT_VERIFY_UPDATED_CTL_FLAG im dwFlags-Element von pVerifyUsageStatus festgelegt. Wenn dieses Flag festgelegt ist, wird kein Update durchgeführt, auch wenn eine zeit gültige, aktualisierte CTL für eine CTL empfangen wird, die sich im Speicher befindet und deren Zeit nicht mehr gültig ist.
Wenn die CERT_VERIFY_TRUSTED_SIGNERS_FLAG festgelegt ist, werden nur die von rghSignerStore in CTL_VERIFY_USAGE_PARA angegebenen Signiererspeicher nach dem Signierer gesucht. Andernfalls stellen die Signiererspeicher zusätzliche Quellen bereit, um das Zertifikat des Signierers zu finden. Weitere Informationen finden Sie in den Hinweisen.
Wenn CERT_VERIFY_NO_TIME_CHECK_FLAG festgelegt ist, werden die CTLs nicht auf Zeitgültigkeit überprüft. Andernfalls sind sie es.
Wenn CERT_VERIFY_ALLOW_MORE_USAGE_FLAG festgelegt ist, kann die CTL zusätzlich zu den durch pSubjectUsage angegebenen Nutzungsbezeichnern enthalten. Andernfalls enthält die gefundene CTL keine zusätzlichen Nutzungsbezeichner.
[in, optional] pVerifyUsagePara
Ein Zeiger auf eine CTL_VERIFY_USAGE_PARA-Struktur , die die zu durchsuchenden Speicher angibt, um die CTL und die Speicher zu finden, die zulässige CTL-Signierer enthalten. Das Festlegen des ListIdentifier-Elements schränkt die Suche weiter ein.
[in, out] pVerifyUsageStatus
Ein Zeiger auf eine CTL_VERIFY_USAGE_STATUS-Struktur . Der cbSize-Member der -Struktur muss auf die Größe der Struktur in Bytes festgelegt werden, und alle anderen Felder müssen auf Null festgelegt werden, bevor CertVerifyCTLUsage aufgerufen wird. Weitere Informationen finden Sie unter CTL_VERIFY_USAGE_STATUS.
Rückgabewert
Wenn der Antragsteller für die angegebene Verwendung vertrauenswürdig ist, wird TRUE zurückgegeben. Andernfalls wird FALSE zurückgegeben. GetLastError kann einen der folgenden Fehlercodes zurückgeben.
Wert | BESCHREIBUNG |
---|---|
|
Es wurde keine DLL oder exportierte Funktion gefunden, um die Verwendung des Antragstellers zu überprüfen. |
|
Die aufgerufene Funktion konnte keine Verwendungsprüfung für den Betreff durchführen. |
|
Der Server war offline. Daher konnte die aufgerufene Funktion die Nutzungsprüfung nicht abschließen. |
|
Der Antragsteller wurde in einer CTL nicht gefunden. |
|
Es wurde kein vertrauenswürdiger Signierer gefunden, um die Signatur der Nachricht oder Vertrauensliste zu überprüfen. |
Der dwError-Member des CTL_VERIFY_USAGE_PARA , auf den pVerifyUsageStatus verweist, wird auf denselben Fehlercode festgelegt.
Hinweise
CertVerifyCTLUsage ist ein Verteiler für Funktionen, die mithilfe eines Objektbezeichners (Object Identifier, OID) installiert werden können. Zunächst wird versucht, eine OID-Funktion zu finden, die mit dem ersten Verwendungsobjektbezeichner in der CLT_USAGE Struktur übereinstimmt, auf die pSubjectUsage verweist. Wenn dies fehlschlägt, werden die Standardfunktionen CertDllVerifyCTLUsage verwendet.
Die CertDllVerifyCTLUsage-Funktion in Cryptnet.dll kann mithilfe einer OID installiert werden. es verfügt über die folgenden Eigenschaften:
- Wenn CTL-Speicher von rghCtlStore in pVerifyUsagePara angegeben werden, werden nur diese Speicher nach einer CTL gesucht. Andernfalls wird der Vertrauensstellungssystemspeicher durchsucht, um eine CTL zu finden.
- Wenn CERT_VERIFY_TRUSTED_SIGNERS_FLAG festgelegt ist, werden nur die von rghSignerStore in pVerifyUsagePara angegebenen Signaturspeicher nach dem Zertifikat gesucht, das dem Aussteller und der Seriennummer des Unterzeichners entspricht. Andernfalls werden der Speicher der CTL-Nachricht, der von rghSignerStore in pVerifyUsagePara angegebene Signiererspeicher, der Systemspeicher des Vertrauenssystemspeichers, der Systemspeicher der Zertifizierungsstelle, root und SPC (Software Publisher Certificate ) nach dem Zertifikat des Signierers durchsucht. In beiden Fällen wird der öffentliche Schlüssel im gefundenen Zertifikat verwendet, um die Signatur der CTL zu überprüfen.
- Wenn die CTL über einen festgelegten NextUpdate-Member verfügt und CERT_VERIFY_NO_TIME_CHECK nicht festgelegt ist, wird die Gültigkeitsdauer überprüft.
- Wenn die aus dem Speicher abgerufene CTL eine ungültige Zeit hat, wird versucht, eine zeitgültige Version zu erhalten. Die CertDllVerifyCTLUsage-Funktion verwendet die NextUpdateLocation-Eigenschaft oder die NextUpdateLocation-Erweiterung der CTL oder durchsucht die Informationen des Signierers nach einem NextUpdateLocation-Attribut .
Anforderungen
Unterstützte Mindestversion (Client) | Windows XP [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2003 [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | wincrypt.h |
Bibliothek | Crypt32.lib |
DLL | Crypt32.dll |