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_CONSTRAINTSszOID_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,並更新 pPolicyStatusdwError 成員。 dwError0ERROR_SUCCESSS_OK) 表示鏈結符合指定的原則。

如果無法驗證鏈結,傳回值會 TRUE,而且您必須確認實際錯誤的 pPolicyStatus 參數。

FALSE 值表示函式無法檢查原則。

言論

dwErrorpPolicyStatus 所指向之 CERT_CHAIN_POLICY_STATUS 結構的成員, 可以套用至單一鏈結專案、簡單鏈結或整個鏈結內容。 如果 dwError 套用至整個鏈結內容,lChainIndexlElementIndex 結構 CERT_CHAIN_POLICY_STATUS 的成員都會設定為 –1。 如果 dwError 套用至完整的簡單鏈結,lElementIndex 會設定為 –1,且 lChainIndex 設定為發生錯誤之第一個鏈結的索引。 如果 dwError 套用至單一憑證專案,lChainIndexlElementIndex 索引發生錯誤的第一個憑證。

若要取得憑證專案,請使用下列語法:

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

AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA

CERT_CHAIN_CONTEXT

CERT_CHAIN_POLICY_PARA

CERT_CHAIN_POLICY_STATUS

CertGetCertificateChain

憑證鏈結驗證函式