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 |
基本チェーン ポリシー検証チェックを実装します。 |
CERT_CHAIN_POLICY_AUTHENTICODE (LPCSTR) 2 |
Authenticode チェーン ポリシー検証チェックを実装します。 pPolicyPara が指す構造体の pPolicyStatus |
CERT_CHAIN_POLICY_AUTHENTICODE_TS (LPCSTR) 3 |
Authenticode タイム スタンプ チェーン ポリシー検証チェックを実装します。 pPolicyPara が指すデータ構造の pPolicyStatus が指すデータ構造の pvExtraPolicyStatus メンバーは使用されず、 NULL に設定する必要があります。 |
CERT_CHAIN_POLICY_SSL (LPCSTR) 4 |
SSL クライアント/サーバー チェーン ポリシー検証チェックを実装します。 pPolicyPara が指すデータ構造の pvExtraPolicyPara メンバー 注: サーバーとクライアントの承認証明書を区別するために、チェーン コンテキストを取得する CertGetCertificateChain 関数を呼び出すには、想定される使用法を設定して証明書の種類を指定する必要があります。 |
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 |
CERT_CHAIN_POLICY_NT_AUTH (LPCSTR) 6 |
次の順序で 3 つの個別のチェーン検証で構成される Windows NT 認証チェーン ポリシーを実装します。 - 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_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
が返され、pPolicyStatus の dwError メンバーが更新されます。
0
(ERROR_SUCCESS または S_OK) の dwError は、チェーンが指定されたポリシーを満たしていることを示します。
チェーンを検証できない場合、戻り値は TRUE
され、実際のエラー pPolicyStatus パラメーターを確認する必要があります。
FALSE
の値は、関数がポリシーを確認できなかったことを示します。
備考
証明書要素を取得するには、次の構文を使用します。
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