CertFindChainInStore 関数 (wincrypt.h)

CertFindChainInStore 関数は、指定した条件を満たすストア内の最初または次の証明書を検索します。 次に、その証明書の証明書チェーン コンテキストをビルドして検証します。 検出され、チェーンが構築される証明書は、dwFindFlags、dwFindTypeおよび 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) と比較します。

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

pPrevChainContextNULL でない場合、この関数は関数が呼び出されるたびに、別の証明書のチェーンを返します。 適切な証明書が 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 構造体に設定されます。 pPrevChainContextNULL でない場合、エラーが発生した場合でも、構造体は常に CertFreeCertificateChain 関数を使用してこの関数によって解放されます。

要件

   
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
対象プラットフォーム Windows
ヘッダー wincrypt.h
Library Crypt32.lib
[DLL] Crypt32.dll

関連項目

CERT_CHAIN_CONTEXT

CERT_CHAIN_FIND_BY_ISSUER_PARA

CertFreeCertificateChain

CertGetCertificateChain

証明書チェーン検証関数