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
CRYPT_E_NO_VERIFY_USAGE_DLL
Es wurde keine DLL oder exportierte Funktion gefunden, um die Verwendung des Antragstellers zu überprüfen.
CRYPT_E_NO_VERIFY_USAGE_CHECK
Die aufgerufene Funktion konnte keine Verwendungsprüfung für den Betreff durchführen.
CRYPT_E_VERIFY_USAGE_OFFLINE
Der Server war offline. Daher konnte die aufgerufene Funktion die Nutzungsprüfung nicht abschließen.
CRYPT_E_NOT_IN_CTL
Der Antragsteller wurde in einer CTL nicht gefunden.
CRYPT_E_NO_TRUSTED_SIGNER
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

Weitere Informationen

CTL_VERIFY_USAGE_PARA

CTL_VERIFY_USAGE_STATUS

CertFindCTLInStore

CertFindSubjectInCTL

Überprüfungsfunktionen mithilfe von CTLs