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
基本チェーン ポリシー検証チェックを実装します。 dwFlags pPolicyPara が指す構造体のメンバー 、既定のポリシー チェック動作を変更するように設定できます。
CERT_CHAIN_POLICY_AUTHENTICODE
(LPCSTR) 2
Authenticode チェーン ポリシー検証チェックを実装します。 pPolicyPara が指す構造体の pvExtraPolicyPara メンバー AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA 構造体を指すよう設定できます。

pPolicyStatus
が指す構造体の pvExtraPolicyStatus メンバー AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS 構造体を指すよう設定できます。
CERT_CHAIN_POLICY_AUTHENTICODE_TS
(LPCSTR) 3
Authenticode タイム スタンプ チェーン ポリシー検証チェックを実装します。 pPolicyPara が指すデータ構造の pvExtraPolicyPara メンバーは、AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA 構造体を指すよう設定できます。

pPolicyStatus が指すデータ構造の pvExtraPolicyStatus メンバーは使用されず、NULLに設定する必要があります。
CERT_CHAIN_POLICY_SSL
(LPCSTR) 4
SSL クライアント/サーバー チェーン ポリシー検証チェックを実装します。 pPolicyPara が指すデータ構造の pvExtraPolicyPara メンバー 、追加のポリシー条件で初期化された SSL_EXTRA_CERT_CHAIN_POLICY_PARA 構造体を指すように設定できます。

注: サーバーとクライアントの承認証明書を区別するために、チェーン コンテキストを取得する CertGetCertificateChain 関数を呼び出すには、想定される使用法を設定して証明書の種類を指定する必要があります。 CertGetCertificateChain
関数の pChainPara 入力パラメーターで渡される CERT_CHAIN_PARA 構造体の RequestedUsage メンバーを設定して、想定される使用法を設定します。
CERT_CHAIN_POLICY_BASIC_CONSTRAINTS
(LPCSTR) 5
基本的な制約チェーン ポリシーを実装します。 チェーン内のすべての証明書を反復処理して、szOID_BASIC_CONSTRAINTS または szOID_BASIC_CONSTRAINTS2 拡張機能をチェックします。 どちらの拡張機能も存在しない場合、証明書は有効なポリシーを持つものと見なされます。 それ以外の場合は、最初の証明書要素について、pPolicyPara パラメーターによって指される CERT_CHAIN_POLICY_PARA 構造体の dwFlags メンバーで指定された予期されるCA_FLAGまたはEND_ENTITY_FLAGと一致するかどうかを確認します。 どちらのフラグも設定されていない場合、最初の要素は CA またはEND_ENTITYのいずれかになります。 その他のすべての要素は、証明機関 (CA) である必要があります。 PathLenConstraint が拡張機能に存在する場合は、チェックされます。

残りの単純なチェーンの最初の要素 (つまり、CTL の署名に使用される証明書) は、END_ENTITYであることを確認します。 この検証が失敗した場合、dwError TRUST_E_BASIC_CONSTRAINTSに設定されます。
CERT_CHAIN_POLICY_NT_AUTH
(LPCSTR) 6
次の順序で 3 つの個別のチェーン検証で構成される 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」を参照してください。
- チェーン内の 2 番目の要素 (終了証明書を発行した CA) が Windows NT 認証の信頼された CA であるかどうかを確認します。 CA は、CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE ストアの場所にある "NTAuth" システム レジストリ ストアに存在する場合、信頼されていると見なされます。 この検証が失敗した場合、CA は信頼されておらず、dwError CERT_E_UNTRUSTEDCAに設定されます。 CERT_PROT_ROOT_FLAGS_REGPATHで定義されている ProtectedRoots サブキー HKEY_LOCAL_MACHINE ポリシーの 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 ルート公開キーが含まれていない場合、pPolicyStatus パラメーターが指す CERT_CHAIN_POLICY_STATUS 構造体の dwError メンバーが CERT_E_UNTRUSTEDROOTに設定されます。

dwFlagspPolicyStatus パラメーターが指す CERT_CHAIN_POLICY_PARA 構造体のメンバーには、MICROSOFT_ROOT_CERT_CHAIN_POLICY_CHECK_APPLICATION_ROOT_FLAG フラグを含めることができます。これにより、この関数は代わりに Microsoft アプリケーション ルート "Microsoft Root Certificate Authority 2011" をチェックします。

dwFlagspPolicyPara パラメーターが指す CERT_CHAIN_POLICY_PARA 構造体のメンバーには、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
チェーン内の証明書に弱い暗号化があるかどうかを確認するか、サード パーティのルート証明書のコンプライアンスを確認し、エラー文字列を指定します。 pPolicyStatus パラメーターが指すCERT_CHAIN_POLICY_STATUS構造体の pvExtraPolicyStatus メンバーは、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)、Windows 10 RTM (KB3163912、Windows 8.1 および Windows Server 2012 R2 (KB3163912)、Windows 7 sp1 および Windows Server 2008 R2 SP1 (KB3161029)

[in] pChainContext

検証するチェーンを含む CERT_CHAIN_CONTEXT 構造体へのポインター。

[in] pPolicyPara

チェーンのポリシー検証基準を提供する CERT_CHAIN_POLICY_PARA 構造体へのポインター。 dwFlags 構造体のメンバーを設定して、既定のポリシー チェック動作を変更できます。

さらに、ポリシー固有のパラメーターは、構造体の pvExtraPolicyPara メンバーでも渡すことができます。

[in, out] pPolicyStatus

チェーンの状態情報が返される CERT_CHAIN_POLICY_STATUS 構造体へのポインター。 OID 固有の追加の状態は、この構造体の pvExtraPolicyStatus メンバーで返すことができます。

戻り値

戻り値は、関数がポリシーを確認できたかどうかを示します。ポリシー チェックが失敗したか成功したかは示しません。

指定したポリシーに対してチェーンを検証できる場合は、TRUE が返され、pPolicyStatusdwError メンバーが更新されます。 0 (ERROR_SUCCESS または S_OK) の dwError は、チェーンが指定されたポリシーを満たしていることを示します。

チェーンを検証できない場合、戻り値は TRUE され、実際のエラー pPolicyStatus パラメーターを確認する必要があります。

FALSE の値は、関数がポリシーを確認できなかったことを示します。

備考

dwError pPolicyStatus が指す CERT_CHAIN_POLICY_STATUS 構造体 メンバーは、単一チェーン要素、単純なチェーン、またはチェーン コンテキスト全体に適用できます。 dwError チェーン コンテキスト全体に適用される場合、lChainIndex と、CERT_CHAIN_POLICY_STATUS 構造体の lElementIndex メンバーの両方が に設定されます。 dwError が完全な単純チェーンに適用される場合、lElementIndex に設定され、lChainIndex は、エラーが発生した最初のチェーンのインデックスに設定されます。 dwError が 1 つの証明書要素に適用される場合は、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

AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA

CERT_CHAIN_CONTEXT

CERT_CHAIN_POLICY_PARA

CERT_CHAIN_POLICY_STATUS

CertGetCertificateChain

証明書チェーン検証機能