次の方法で共有


CERT_CHAIN_FIND_ISSUER_PARA構造体 (wincrypt.h)

CERT_CHAIN_FIND_BY_ISSUER_PARA構造体には、証明書チェーンを構築するために CertFindChainInStore 関数で使用される情報が含まれています。

構文

typedef struct _CERT_CHAIN_FIND_BY_ISSUER_PARA {
  DWORD                                  cbSize;
  LPCSTR                                 pszUsageIdentifier;
  DWORD                                  dwKeySpec;
  DWORD                                  dwAcquirePrivateKeyFlags;
  DWORD                                  cIssuer;
  CERT_NAME_BLOB                         *rgIssuer;
  PFN_CERT_CHAIN_FIND_BY_ISSUER_CALLBACK pfnFindCallback;
  void                                   *pvFindArg;
  DWORD                                  *pdwIssuerChainIndex;
  DWORD                                  *pdwIssuerElementIndex;
} CERT_CHAIN_FIND_ISSUER_PARA, *PCERT_CHAIN_FIND_ISSUER_PARA, CERT_CHAIN_FIND_BY_ISSUER_PARA, *PCERT_CHAIN_FIND_BY_ISSUER_PARA;

メンバー

cbSize

この構造体のサイズをバイト単位で格納します。 このサイズはハードコーディングしないでください。 次の例に示すように、 sizeof 演算子を使用してコンパイル時に設定する必要があります。

CERT_CHAIN_FIND_BY_ISSUER_PARA findParams;
findParams.cbSize = sizeof(CERT_CHAIN_FIND_BY_ISSUER_PARA);

pszUsageIdentifier

照合する使用状況識別子を含む null で終わる ANSI 文字列へのポインター。 このメンバーが NULL の場合、任意の使用法を持つ証明書が一致する可能性があります。

dwKeySpec

照合するキー指定値を格納します。 これには、次のいずれかの値を指定できます。 このパラメーターが 0 の場合、任意の証明書が一致する可能性があります。

意味
AT_KEYEXCHANGE
0x01
キーは、アルゴリズムに応じて暗号化または署名に使用できます。
AT_SIGNATURE
0x02
キーは署名に使用できます。

dwAcquirePrivateKeyFlags

CertFindChainInStore 関数の dwFindFlags パラメーターにCERT_CHAIN_FIND_BY_ISSUER_COMPARE_KEY_FLAGが含まれている場合、公開キーの比較を行うために CryptAcquireCertificatePrivateKey 関数が呼び出されます。 この場合、このメンバーは CryptAcquireCertificatePrivateKey 関数の dwFlags パラメーターとして渡されます。 このメンバーに使用できる値とその意味については、CryptAcquireCertificatePrivateKey 関数の dwFlags パラメーターを参照してください。

cIssuer

rgIssuer 配列内の要素の数を格納します。 このメンバーが 0 の場合、すべての発行者が一致する可能性があります。

rgIssuer

一致する X.509抽象構文表記 1 (ASN.1) エンコードされた発行者名 BLOB の 配列。 このメンバーが NULL であるか、コールバック関数が TRUE を返す場合、指定された KeySpec と拡張キー使用法を持つ 秘密キー を持つ証明書のチェーン 新しい要素が追加されます。

pfnFindCallback

チェーンが作成される証明書をアプリケーションでフィルター処理できるようにする CertChainFindByIssuerCallback コールバック関数へのポインター。 このメンバーが NULL の場合、検出されたすべての証明書に対してチェーンが構築されます。 このメンバーが NULL でない場合、コールバック関数の戻り値に基づいて、検出された証明書のチェーンが作成されます。

pvFindArg

この構造体の pfnFindCallback メンバーが指す CertChainFindByIssuerCallback コールバック関数の pvFindArg パラメーターとして渡されるアプリケーション定義値。

pdwIssuerChainIndex

発行者と一致するチェーンの 0 から始まるインデックスを受け取る DWORD 値へのポインター。 このメンバーが NULL の場合は使用されません。

cIssuer が 0 の場合、このメンバーは使用されません。

このメンバーは、 CERT_CHAIN_FIND_BY_ISSUER_PARA_HAS_EXTRA_FIELDS マクロが定義されている場合にのみ定義されます。

pdwIssuerElementIndex

発行者の証明書のチェーン内の要素の 0 から始まるインデックスを受け取る DWORD 値へのポインター。 このメンバーが NULL の場合は使用されません。

cIssuer が 0 の場合、このメンバーは使用されません。

このメンバーは、検出された証明書のインデックスに加えて、発行者の証明書のインデックスを提供するために 1 つに設定されます。 このため、BLOB という名前に一致する部分的なチェーンまたは自己署名証明書によって 、pdwIssuerElementIndex が チェーン内の最後の証明書をポイントする可能性があります。 この状況を検出するには、pdwIssuerElementIndex の内容とCERT_SIMPLE_CHAIN構造体の cElement メンバーを比較して、インデックスが有効であることを確認します。

このメンバーは、 CERT_CHAIN_FIND_BY_ISSUER_PARA_HAS_EXTRA_FIELDS マクロが定義されている場合にのみ定義されます。

注釈

pdwIssuerChainIndex および pdwIssuerElementIndex メンバーは、CERT_CHAIN_FIND_BY_ISSUER_PARA_HAS_EXTRA_FIELDS マクロが定義されている場合にのみ使用できます。 CERT_CHAIN_FIND_BY_ISSUER_PARA_HAS_EXTRA_FIELDS マクロが定義されている場合、アプリケーションは未使用のすべてのフィールドをゼロに初期化する必要があります。

次の擬似コードは、この構造体の pdwIssuerChainIndex メンバーと pdwIssuerElementIndex メンバーを使用して発行者の証明書にアクセスする方法を示しています。

CERT_CHAIN_FIND_BY_ISSUER_PARA findParams;
PCCERT_CHAIN_CONTEXT pChainContext = NULL;
DWORD dwChainIndex = 0;
DWORD dwElementIndex = 0;
findParams.pdwIssuerChainIndex = &dwChainIndex;
findParams.pdwIssuerElementIndex = &dwElementIndex;

pChainContext = CertFindChainInStore(
    hCertStore,
    X509_ASN_ENCODING,
    0,
    CERT_CHAIN_FIND_BY_ISSUER,
    (LPVOID)&findParams,
    NULL);
if(pChainContext)
{
    // Make sure the element index is valid.
    if(dwElementIndex < pChainContext->
        rgpChain[dwChainIndex]->cElement)
    {
        PCERT_CHAIN_ELEMENT pIssuerElement;
        pIssuerElement = pChainContext->
            rgpChain[dwChainIndex]->rgpElement[dwElementIndex];
       // ...
    }

    // Free the certificate chain.
    CertFreeCertificateChain(pChainContext);
}

要件

要件
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
Header wincrypt.h

こちらもご覧ください

CertChainFindByIssuerCallback

CertFindChainInStore

CryptAcquireCertificatePrivateKey