CertFindChainInStore 関数 (wincrypt.h)

CertFindChainInStore 関数は、指定された条件を満たす ストア 内の最初または次の証明書を検索します。 その後、その証明書の証明書チェーン コンテキストをビルドして検証します。 dwFindFlagsdwFindType、および pvFindPara パラメーター によって確立された条件に従って、チェーンが構築される証明書が選択されます。 この関数をループで使用すると、指定した検索条件に一致する証明書ストア内のすべての証明書を検索し、検出された各証明書の証明書チェーン コンテキストを構築できます。

構文

PCCERT_CHAIN_CONTEXT CertFindChainInStore(
  [in] HCERTSTORE           hCertStore,
  [in] DWORD                dwCertEncodingType,
  [in] DWORD                dwFindFlags,
  [in] DWORD                dwFindType,
  [in] const void           *pvFindPara,
  [in] PCCERT_CHAIN_CONTEXT pPrevChainContext
);

パラメーター

[in] hCertStore

チェーンが構築される証明書を検索するストアのハンドル。 このハンドルは、チェーンの構築時に CertGetCertificateChain 関数に追加ストアとして渡されます。

[in] dwCertEncodingType

ストアのエンコードに使用された 証明書エンコードの種類。 この値の高い WORD に含まれる メッセージ エンコードの種類 識別子は、この関数では無視されます。

このパラメーターには、現在定義されている次の証明書エンコードの種類を指定できます。

価値 意味
X509_ASN_ENCODING
1 (0x1)
X.509 証明書エンコードを指定します。

[in] dwFindFlags

検索の追加オプションが含まれています。 このパラメーターに指定できる値は、dwFindType パラメーターの値によって異なります。

dwFindTypeCERT_CHAIN_FIND_BY_ISSUERが含まれている場合、このパラメーターには 0 個または 1 つ以上の次の値の組み合わせを含めることができます。

価値 意味
CERT_CHAIN_FIND_BY_ISSUER_COMPARE_KEY_FLAG
証明書の公開キーを、暗号化サービス プロバイダーの公開キーと比較します。 この比較は、チェーンの作成時に最後に行われたチェックです。

発行者の hCryptProv メンバーには秘密キーが含まれているため、このプロセス中に複数回確認する必要がある場合があります。このチェックを容易にするために、dwAcquirePrivateKeyFlags メンバーを CERT_CHAIN_FIND_BY_ISSUER_PARA 構造体に設定して、その hCryptProvのキャッシュを有効にすることができます。

CERT_CHAIN_FIND_BY_ISSUER_COMPLEX_CHAIN_FLAG
既定では、最初の単純チェーンのみが発行者名の一致をチェックします。 このフラグを設定すると、既定値がオーバーライドされ、以降の単純なチェーンで発行者名の一致もチェックされます。
CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_FLAG
キャッシュされたシステム ストア (Root、My、Ca、Trust) のみを検索して発行者証明書を検索することで、この関数のパフォーマンスを向上させます。 このフラグが設定されていない場合、関数はキャッシュされたシステム ストアと、hCertStore パラメーターで表されるストアを検索します。
CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_URL_FLAG
URL キャッシュのみが検索されます。 インターネットは検索されません。
CERT_CHAIN_FIND_BY_ISSUER_LOCAL_MACHINE_FLAG
ローカル コンピューター証明書ストアのみを開きます。 現在のユーザーの証明書ストアは開かっていません。
CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG
証明書に秘密キーが関連付けられているかどうかを判断するためのチェックは行われません。

[in] dwFindType

ストア内の証明書を検索するために使用する条件を決定します。

このパラメーターには、現在定義されている次の値を指定できます。

CERT_CHAIN_FIND_BY_ISSUER

発行者の名前に基づいて証明書を検索します。 pvFindPara パラメーターは、検索を変更するメンバーを含む CERT_CHAIN_FIND_BY_ISSUER_PARA 構造体へのポインターです。

証明書チェーンは、使用可能な 秘密キーを持つ証明書用に構築されています。 既定では、発行者名の一致では、最初の単純なチェーン内の発行者のみが比較されます。 このフラグが設定されている場合、すべてのチェーンで、一連の発行者名のいずれかに一致する発行者証明書がチェックされます。

この関数は、pvFindPara 構造体で渡 BLOB 名前を、ルート証明書の証明機関だけでなく、チェーン内の任意の 証明機関 (CA) と比較します。

この関数は失効チェックを実行しません。

pPrevChainContext が NULLされていない場合、この関数は、関数が呼び出されるたびに別の証明書のチェーンを返します。 適切な証明書が 1 つしかなく、一致する発行元証明機関が 2 つあり、そのうちの 1 つが失効している場合、この関数は失効したチェーンを返す可能性があります。 その後、アプリケーションが CertVerifyRevocation 関数の呼び出しを通じて失効自体をチェックし、チェーンが不適切であると検出した場合、CertFindChainInStore 関数への追加の呼び出しでは、有効な証明機関から同じ証明書を含むチェーンは返されません。 代わりに、異なる証明書を持つまったく異なるチェーンが返されるか、NULL(そのようなチェーンが見つからない場合) が返されます。

[in] pvFindPara

追加の検索条件を含むポインター。 このパラメーターが指すデータの型と形式は、dwFindType パラメーターの値によって異なります。

[in] pPrevChainContext

この関数の前の呼び出しから返された CERT_CHAIN_CONTEXT 構造体へのポインター。 この証明書から検索が開始されます。 この関数の最初の呼び出しでは、このパラメーターは NULLする必要があります。 後続の呼び出しでは、これは前の関数の呼び出しによって返されるポインターです。 このパラメーターが NULLされていない場合、この関数はこの構造体を解放します。

戻り値

最初または次のチェーン コンテキストがビルドされていない場合は、NULL が返されます。 それ以外の場合は、読み取り専用の CERT_CHAIN_CONTEXT 構造体へのポインターが返されます。 CERT_CHAIN_CONTEXT 構造体は、この関数の後続の呼び出しで pPrevChainContext パラメーターとして渡されると解放されます。 それ以外の場合は、CertFreeCertificateChain 関数を呼び出して、CERT_CHAIN_CONTEXT 構造体を明示的に解放する必要があります。

備考

pPrevChainContext パラメーターは、チェーン コンテキストを構築する最初の呼び出しで NULL する必要があります。 次のチェーン コンテキストを構築するために、pPrevChainContext は、前の呼び出しによって返された CERT_CHAIN_CONTEXT 構造体に設定されます。 pPrevChainContext が NULLされていない場合、エラーが発生した場合でも、CertFreeCertificateChain 関数を使用して構造体は常にこの関数によって解放されます。

必要条件

要件 価値
サポートされる最小クライアント Windows XP [デスクトップ アプリのみ]
サポートされる最小サーバー Windows Server 2003 [デスクトップ アプリのみ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー wincrypt.h
ライブラリ Crypt32.lib
DLL Crypt32.dll

関連項目

CERT_CHAIN_CONTEXT

CERT_CHAIN_FIND_BY_ISSUER_PARA

CertFreeCertificateChain

CertGetCertificateChain

証明書チェーン検証機能