CertVerifyCertificateChainPolicy 函式 (wincrypt.h)
CertVerifyCertificateChainPolicy 函式會檢查憑證鏈結以確認其有效性,包括其符合任何指定的有效原則準則。
語法
BOOL CertVerifyCertificateChainPolicy(
[in] LPCSTR pszPolicyOID,
[in] PCCERT_CHAIN_CONTEXT pChainContext,
[in] PCERT_CHAIN_POLICY_PARA pPolicyPara,
[in, out] PCERT_CHAIN_POLICY_STATUS pPolicyStatus
);
參數
[in] pszPolicyOID
下表列出目前預先定義的驗證鏈結原則結構。
價值 | 意義 |
---|---|
CERT_CHAIN_POLICY_BASE (LPCSTR) 1 |
實作基底鏈結原則驗證檢查。 pPolicyPara 所指向之結構的 dwFlags 成員可以設定為改變默認原則檢查行為。 |
CERT_CHAIN_POLICY_AUTHENTICODE (LPCSTR) 2 |
實作 Authenticode 鏈結原則驗證檢查。
pPolicyPara 所指向之結構的 pvExtraPolicyPara 成員可以設定為指向 AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA 結構。 pvExtraPolicyStatuspPolicyStatus 所指向之結構的成員 可以設定為指向 AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS 結構。 |
CERT_CHAIN_POLICY_AUTHENTICODE_TS (LPCSTR) 3 |
實作 Authenticode 時間戳鏈結原則驗證檢查。
pvExtraPolicyParapPolicyPara 所指向之數據結構的成員 可以設定為指向 AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA 結構。 pvExtraPolicyStatuspPolicyStatus 所指向之數據結構的成員 未使用,而且必須設定為 NULL 。 |
CERT_CHAIN_POLICY_SSL (LPCSTR) 4 |
實作 SSL 用戶端/伺服器鏈結原則驗證檢查。
pPolicyPara 所指向之數據結構中的 pvExtraPolicyPara 成員 可以設定為指向以其他原則準則初始化的 SSL_EXTRA_CERT_CHAIN_POLICY_PARA 結構。 注意: 若要區分伺服器和用戶端授權憑證,請呼叫 CertGetCertificateChain 函式,以取得鏈結內容,藉由設定預期的使用方式來指定憑證類型。 設定傳入 pChainParaCertGetCertificateChain 函式之 CERT_CHAIN_PARA 結構成員 RequestedUsage 成員,以設定預期的使用方式。 |
CERT_CHAIN_POLICY_BASIC_CONSTRAINTS (LPCSTR) 5 |
實作基本條件約束鏈結原則。 逐一查看鏈結中檢查 szOID_BASIC_CONSTRAINTS 或 szOID_BASIC_CONSTRAINTS2 延伸模組的所有憑證。 如果兩個延伸模組都不存在,則會假設憑證具有有效的原則。 否則,針對第一個憑證專案,會檢查它是否符合 dwFlags 中所指定之預期CA_FLAG或END_ENTITY_FLAGCERT_CHAIN_POLICY_PARA 結構 pPolicyPara 參數所指向的成員。 如果未設定或兩個旗標,則第一個專案可以是 CA 或END_ENTITY。 所有其他元素都必須是 證書頒發機構單位 (CA)。 如果 PathLenConstraint 存在於延伸模組中,則會加以檢查。 其餘簡單鏈結中的第一個元素(也就是用來簽署 CTL 的憑證)會檢查為END_ENTITY。 如果此驗證失敗,dwError 將會設定為 TRUST_E_BASIC_CONSTRAINTS。 |
CERT_CHAIN_POLICY_NT_AUTH (LPCSTR) 6 |
實作 Windows NT 驗證鏈結原則,其包含下列順序的三個不同鏈結驗證: - CERT_CHAIN_POLICY_BASE:實作基底鏈結原則驗證檢查。 dwFlags 的 LOWORD 可以在 pPolicyPara 中設定,以改變預設原則檢查行為。 如需詳細資訊,請參閱CERT_CHAIN_POLICY_BASE。 - CERT_CHAIN_POLICY_BASIC_CONSTRAINTS:實作基本條件約束鏈結原則。 dwFlags 的 HIWORD 可以設定為指定第一個項目必須是 CA 或END_ENTITY。 如需詳細資訊,請參閱CERT_CHAIN_POLICY_BASIC_CONSTRAINTS。 - 檢查鏈結中的第二個專案,即核發結束憑證的 CA 是否為 Windows NT 驗證的受信任 CA。 如果 CA 存在於CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE存放區位置中找到的 「NTAuth」 系統登錄存放區中,則會將其視為受信任。 如果此驗證失敗,則 CA 不受信任,且 dwError 設定為 CERT_E_UNTRUSTEDCA。 如果在 HKEY_LOCAL_MACHINE 原則 ProtectedRoots 子 CERT_PROT_ROOT_FLAGS_REGPATH機碼的 Flags 值中設定CERT_PROT_ROOT_DISABLE_NT_AUTH_REQUIRED_FLAG,且上述檢查失敗,則會檢查鏈結中 dwInfoStatus中設定CERT_TRUST_HAS_VALID_NAME_CONSTRAINTS。 如果所有命名空間都有有效的名稱條件約束,包括 UPN,則會設定此條件約束。 如果鏈結沒有這項信息狀態設定,dwError 會設定為 CERT_E_UNTRUSTEDCA。 |
CERT_CHAIN_POLICY_MICROSOFT_ROOT (LPCSTR) 7 |
檢查第一個簡單鏈結的最後一個專案是否有Microsoft根公鑰。 如果該元素不包含Microsoft根公鑰,dwErrorCERT_CHAIN_POLICY_STATUS 結構的成員,pPolicyStatus 參數所指向的成員會設定為 CERT_E_UNTRUSTEDROOT。 pPolicyStatus 參數所指向之 CERT_CHAIN_POLICY_PARA 結構的 dwFlags 成員可以包含 MICROSOFT_ROOT_CERT_CHAIN_POLICY_CHECK_APPLICATION_ROOT_FLAG 旗標,這會導致此函式改為檢查Microsoft應用程式根目錄 “Microsoft Root Certificate Authority 2011”。 pPolicyPara 參數所指向之 CERT_CHAIN_POLICY_PARA 結構的 dwFlags 成員可以包含 MICROSOFT_ROOT_CERT_CHAIN_POLICY_ENABLE_TEST_ROOT_FLAG 旗標,這會導致此函式也會檢查Microsoft測試根目錄。 附注: 此原則 對象標識碼 (OID) 本身不會執行任何原則驗證檢查,它應該與其他原則搭配使用。 |
CERT_CHAIN_POLICY_EV (LPCSTR) 8 |
指定執行憑證的延伸驗證。 Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP: 不支援此值。 |
CERT_CHAIN_POLICY_SSL_F12 (LPCSTR) 9 |
檢查鏈結中的任何憑證是否有弱式密碼編譯,或第三方跟證書合規性,並提供錯誤字串。
pvExtraPolicyStatus CERT_CHAIN_POLICY_STATUS 結構的成員,pPolicyStatus 參數必須指向 SSL_F12_EXTRA_CERT_CHAIN_POLICY_STATUS,這會更新為弱式密碼編譯和根程式合規性檢查的結果。 在呼叫之前,pPolicyStatus 參數所指向之CERT_CHAIN_POLICY_STATUS結構的 cbSize 成員必須設定為大於或等於 sizeof(SSL_F12_EXTRA_CERT_CHAIN_POLICY_STATUS) 的值。 pPolicyStatus 參數所指向之CERT_CHAIN_POLICY_STATUS結構中的 dwError 成員,將會設定為 TRUST_E_CERT_SIGNATURE 潛在的弱式密碼編譯,並設定為不符合Microsoft根計劃的第三方根目錄 CERT_E_UNTRUSTEDROOT。 Windows 10 版本 1607、Windows Server 2016、Windows 10 版本 1511 與 KB3172985、具有 KB3163912 的 Windows 10 RTM、Windows 8.1 和具有 KB3163912 的 Windows Server 2012 R2,以及具有 SP1 的 Windows 7 和具有 KB3161029 的 Windows Server 2008 R2 SP1 |
[in] pChainContext
包含要驗證之鏈結之 CERT_CHAIN_CONTEXT 結構的指標。
[in] pPolicyPara
提供鏈結原則驗證準則之 CERT_CHAIN_POLICY_PARA 結構的指標。 dwFlags 該結構的成員可以設定為變更默認原則檢查行為。
此外,原則特定參數也可以傳入結構 pvExtraPolicyPara 成員。
[in, out] pPolicyStatus
傳回鏈結狀態資訊的 CERT_CHAIN_POLICY_STATUS 結構的指標。 OID 特定的額外狀態可以在這個結構的 pvExtraPolicyStatus 成員中傳回。
傳回值
傳回值表示函式是否能夠檢查原則,但不會指出原則檢查失敗或通過。
如果可以為指定的原則驗證鏈結,則會傳回 TRUE
,並更新 pPolicyStatus 的 dwError 成員。
dwError0
(ERROR_SUCCESS 或 S_OK) 表示鏈結符合指定的原則。
如果無法驗證鏈結,傳回值會 TRUE
,而且您必須確認實際錯誤的 pPolicyStatus 參數。
FALSE
值表示函式無法檢查原則。
言論
dwErrorpPolicyStatus 所指向之 CERT_CHAIN_POLICY_STATUS 結構的成員, 可以套用至單一鏈結專案、簡單鏈結或整個鏈結內容。 如果 dwError 套用至整個鏈結內容,lChainIndex 和 lElementIndex 結構 CERT_CHAIN_POLICY_STATUS 的成員都會設定為 –1
。 如果 dwError 套用至完整的簡單鏈結,lElementIndex 會設定為 –1
,且 lChainIndex 設定為發生錯誤之第一個鏈結的索引。 如果 dwError 套用至單一憑證專案,lChainIndex 和 lElementIndex 索引發生錯誤的第一個憑證。
若要取得憑證專案,請使用下列語法:
pChainContext->rgpChain[lChainIndex]->rgpElement[lElementIndex];
使用 CertGetCertificateChain 函式來啟用和執行證書吊銷檢查。 CertVerifyCertificateChainPolicy 函式不會檢查憑證鏈結中的憑證是否已撤銷。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows XP [傳統型應用程式 |UWP 應用程式] |
支援的最低伺服器 | Windows Server 2003 [傳統型應用程式 |UWP 應用程式] |
目標平臺 | 窗戶 |
標頭 | wincrypt.h |
連結庫 | Crypt32.lib |
DLL | Crypt32.dll |
另請參閱
AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA
AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS