CertVerifyRevocation 函式 (wincrypt.h)

CertVerifyRevocation 函式會檢查 rgpvContext 陣列中包含的憑證撤銷狀態。 如果清單中找到要撤銷的憑證,則不會再進一步檢查。 此陣列可以是從端點實體向上傳播至 根授權單位的憑證鏈結,但不需要或假設憑證清單的這個本質。

語法

BOOL CertVerifyRevocation(
  [in]           DWORD                   dwEncodingType,
  [in]           DWORD                   dwRevType,
  [in]           DWORD                   cContext,
  [in]           PVOID []                rgpvContext,
  [in]           DWORD                   dwFlags,
  [in, optional] PCERT_REVOCATION_PARA   pRevPara,
  [in, out]      PCERT_REVOCATION_STATUS pRevStatus
);

參數

[in] dwEncodingType

指定所使用的編碼類型。 目前只會使用X509_ASN_ENCODING和PKCS_7_ASN_ENCODING;不過,未來可能會新增其他編碼類型。 針對目前的編碼類型,請使用 X509_ASN_ENCODING |PKCS_7_ASN_ENCODING。

[in] dwRevType

指出在 rgpvContext 中傳遞的內容結構類型。 目前只會定義CERT_CONTEXT_REVOCATION_TYPE撤銷憑證。

[in] cContext

rgpvContext 陣列中的項目計數。

[in] rgpvContext

dwRevType CERT_CONTEXT_REVOCATION_TYPE時, rgpvContextCERT_CONTEXT 結構的指標陣列。 這些內容必須包含足夠的資訊,才能允許可安裝或已註冊的撤銷 DLL 尋找撤銷伺服器。 此資訊通常會在延伸模組中傳達,例如 PKIX 第 1 部分中由因特網工程工作組 (IETF) 定義的 CRLDistributionsPoints 擴充功能。

為了提高效率,一次傳入的內容越多,越好。

[in] dwFlags

指出任何特殊處理需求。 此參數可以是下列其中一個旗標。

意義
CERT_VERIFY_REV_CHAIN_FLAG
憑證鏈結的驗證是假設每個憑證除外,但第一個憑證是前面憑證的簽發者。 如果 dwRevType 不是CERT_CONTEXT_REVOCATION_TYPE,則不會假設內容的順序。
CERT_VERIFY_CACHE_ONLY_BASED_REVOCATION
防止撤銷處理程式存取任何網路型資源以進行撤銷檢查。
CERT_VERIFY_REV_ACCUMULATIVE_TIMEOUT_FLAG
設定時, dwUrlRetrievalTimeout 是所有URL網路擷取的累計逾時。
CERT_VERIFY_REV_SERVER_OCSP_FLAG
設定時,此函式只會使用 在線憑證狀態通訊協定 (OCSP) 進行撤銷檢查。 如果憑證沒有任何 OCSP AIA URL,pRevStatus 參數的 dwError 成員會設定為 CRYPT_E_NOT_IN_REVOCATION_DATABASE。

[in, optional] pRevPara

選擇性地設定以協助尋找簽發者。 如需詳細資訊,請參閱 CERT_REVOCATION_PARA 結構。

[in, out] pRevStatus

呼叫 CertVerifyRevocation 之前,只需要設定 pRevStatus 所指向CERT_REVOCATION_STATUS的 cbSize 成員。

如果函式傳回 FALSE,這個結構的成員將會包含錯誤狀態資訊。 如需詳細資訊,請參閱 CERT_REVOCATION_STATUS。 如需發生撤銷驗證問題時 pRevStatus 如何更新的描述,請參閱。

傳回值

如果函式成功檢查所有內容,且未撤銷任何內容,則函式會傳回 TRUE。 如果函式失敗,它會傳回 FALSE,並更新 pRevStatus 所指向的CERT_REVOCATION_STATUS結構,如CERT_REVOCATION_STATUS中所述。

當任何內容撤銷處理程式因為錯誤而傳回 FALSE 時,pRevStatus 所指向結構中的 dwError 成員將會由處理程式設定,以指定發生哪個錯誤。 GetLastError 會傳回等於CERT_REVOCATION_STATUS結構 dwError 成員中指定的錯誤碼。 GetLastError 可以是下列其中一個值。

Description
CRYPT_E_NO_REVOCATION_CHECK
已安裝或已註冊的撤銷函式無法在內容上執行撤銷檢查。
CRYPT_E_NO_REVOCATION_DLL
找不到可驗證撤銷的已安裝或已註冊 DLL。
CRYPT_E_NOT_IN_REVOCATION_DATABASE
在撤銷伺服器的資料庫中找不到要檢查的內容。
CRYPT_E_REVOCATION_OFFLINE
無法連線到撤銷伺服器。
CRYPT_E_REVOKED
已撤銷內容。 pRevStatus 中的 dwReason 包含撤銷的原因。
ERROR_SUCCESS
內容很好。
E_INVALIDARG
pRevStatus 中的 cbSize 小於 sizeof (CERT_REVOCATION_STATUS) 。 請注意,pRevStatus 中的 dwError 不會更新此錯誤。

備註

下列範例顯示發生撤銷驗證問題時 ,pRevStatus 如何更新:

請考慮 cContext 為 4 的情況:

如果 CertVerifyRevocation 可以確認 rgpvContext[0] 和 rgpvContext[1] 未撤銷,但無法檢查 rgpvContext[2],pRevStatus 成員 dwIndex 會設定為兩個,表示索引兩處的內容有問題,pRevStatusdwError 成員會設定為CRYPT_E_NO_REVOCATION_CHECK,並傳回 FALSE

如果找到要撤銷的 rgpvContext[2] ,pRevStatusdwIndex 成員會設定為 2,而 pRevStatusdwError 成員會設定為 CRYPT_E_REVOKED,dwReason 會更新,並傳回 FALSE

不論是哪一種情況, rgpvContext[0] 和 rgpvContext[1] 都已驗證不撤銷, rgpvContext[2] 是最後一個已檢查的數位索引,而且 rgpvContext[3] 完全未核取。

規格需求

需求
最低支援的用戶端 Windows XP [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2003 [僅限桌面應用程式]
目標平台 Windows
標頭 wincrypt.h
程式庫 Crypt32.lib
Dll Crypt32.dll

另請參閱

CERT_CONTEXT

CERT_REVOCATION_PARA

CERT_REVOCATION_STATUS

CertVerifyCRLTimeValidity

CertVerifyTimeValidity

CertVerifyValidityNesting

資料管理 函式