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時, rgpvContext 是 CERT_CONTEXT 結構的指標陣列。 這些內容必須包含足夠的資訊,才能允許可安裝或已註冊的撤銷 DLL 尋找撤銷伺服器。 此資訊通常會在延伸模組中傳達,例如 PKIX 第 1 部分中由因特網工程工作組 (IETF) 定義的 CRLDistributionsPoints 擴充功能。
為了提高效率,一次傳入的內容越多,越好。
[in] dwFlags
指出任何特殊處理需求。 此參數可以是下列其中一個旗標。
值 | 意義 |
---|---|
|
憑證鏈結的驗證是假設每個憑證除外,但第一個憑證是前面憑證的簽發者。 如果 dwRevType 不是CERT_CONTEXT_REVOCATION_TYPE,則不會假設內容的順序。 |
|
防止撤銷處理程式存取任何網路型資源以進行撤銷檢查。 |
|
設定時, dwUrlRetrievalTimeout 是所有URL網路擷取的累計逾時。 |
|
設定時,此函式只會使用 在線憑證狀態通訊協定 (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 |
---|---|
|
已安裝或已註冊的撤銷函式無法在內容上執行撤銷檢查。 |
|
找不到可驗證撤銷的已安裝或已註冊 DLL。 |
|
在撤銷伺服器的資料庫中找不到要檢查的內容。 |
|
無法連線到撤銷伺服器。 |
|
已撤銷內容。 pRevStatus 中的 dwReason 包含撤銷的原因。 |
|
內容很好。 |
|
pRevStatus 中的 cbSize 小於 sizeof (CERT_REVOCATION_STATUS) 。 請注意,pRevStatus 中的 dwError 不會更新此錯誤。 |
備註
下列範例顯示發生撤銷驗證問題時 ,pRevStatus 如何更新:
請考慮 cContext 為 4 的情況:
如果 CertVerifyRevocation 可以確認 rgpvContext[0] 和 rgpvContext[1] 未撤銷,但無法檢查 rgpvContext[2],pRevStatus 成員 dwIndex 會設定為兩個,表示索引兩處的內容有問題,pRevStatus 的 dwError 成員會設定為CRYPT_E_NO_REVOCATION_CHECK,並傳回 FALSE。
如果找到要撤銷的 rgpvContext[2] ,pRevStatus 的 dwIndex 成員會設定為 2,而 pRevStatus 的 dwError 成員會設定為 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 |