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構造体を指すよう設定できます。

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 認証チェーン ポリシーを実装します。
  1. CERT_CHAIN_POLICY_BASE— ベース チェーン ポリシー検証チェックを実装します。 既定のポリシー チェック動作を変更するには、pPolicyParadwFlags の LOWORD を設定できます。 詳細については、「CERT_CHAIN_POLICY_BASE」を参照してください。
  2. CERT_CHAIN_POLICY_BASIC_CONSTRAINTS — 基本的な制約チェーン ポリシーを実装します。 dwFlags の HIWORD を設定して、最初の要素が CA またはEND_ENTITYである必要があるかどうかを指定できます。 詳細については、「CERT_CHAIN_POLICY_BASIC_CONSTRAINTS」を参照してください。
  3. チェーン内の 2 番目の要素 (終了証明書を発行した CA) が Windows NT 認証用の信頼された CA であるかどうかを確認します。 CA は、CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE ストアの場所にある "NTAuth" システム レジストリ ストアに存在する場合、信頼されていると見なされます。 この検証が失敗した場合、CA は信頼されておらず、dwError は CERT_E_UNTRUSTEDCA に設定されます。HKEY_LOCAL_MACHINE ポリシー ProtectedRoots サブキーの Flags 値にCERT_PROT_ROOT_DISABLE_NT_AUTH_REQUIRED_FLAGが設定され、CERT_PROT_ROOT_FLAGS_REGPATHによって定義され、上記のチェックが失敗した場合、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に設定されます。

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
チェーン内の証明書に弱い暗号化があるかどうか、またはサード パーティのルート証明書のコンプライアンスを確認し、エラー文字列を指定します。 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、KB3172985付きバージョン 1511、KB3163912、Windows 10 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 メンバーが更新されます。 dwError が 0 (ERROR_SUCCESSまたはS_OK) の場合、チェーンが指定したポリシーを満たしていることを示します。

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

FALSE の値は、関数がポリシーに対してチェックできなかったことを示します。

解説

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

証明書要素を取得するには、次の構文を使用します。

pChainContext->rgpChain[lChainIndex]->rgpElement[lElementIndex];

証明書失効チェックを有効にして実行するには、 CertGetCertificateChain 関数を使用します。 証明書チェーン内の証明書が取り消された場合、CertVerifyCertificateChainPolicy 関数はチェックされません。

要件

   
サポートされている最小のクライアント Windows XP [デスクトップ アプリ | UWP アプリ]
サポートされている最小のサーバー Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ]
対象プラットフォーム Windows
ヘッダー wincrypt.h
Library 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

証明書チェーン検証関数