CertGetIssuerCertificateFromStore 関数 (wincrypt.h)

CertGetIssuerCertificateFromStore 関数は、指定されたサブジェクト証明書の最初または次の発行者の証明書ストアから証明書コンテキストを取得します。 この関数を使用する代わりに、新しい 証明書チェーン検証関数 を使用することをお勧めします。

構文

PCCERT_CONTEXT CertGetIssuerCertificateFromStore(
  [in]           HCERTSTORE     hCertStore,
  [in]           PCCERT_CONTEXT pSubjectContext,
  [in, optional] PCCERT_CONTEXT pPrevIssuerContext,
  [in, out]      DWORD          *pdwFlags
);

パラメーター

[in] hCertStore

証明書ストアのハンドル。

[in] pSubjectContext

サブジェクト情報を含む CERT_CONTEXT 構造体へのポインター。 このパラメーターは、任意の証明書ストアから取得することも、 CertCreateCertificateContext 関数を使用して呼び出し元アプリケーションで作成することもできます。

[in, optional] pPrevIssuerContext

発行者情報を含む CERT_CONTEXT 構造体へのポインター。 発行者は、特に有効期間が変更されようとしている場合に、複数の証明書を持つことができます。 最初の発行者証明書を取得するには、呼び出しでこのパラメーターを NULL にする 必要があります。 発行者の次の証明書を取得するには、 pPrevIssuerContext を、前の呼び出しによって返された CERT_CONTEXT 構造体に設定します。

この関数は、このパラメーターの NULL 以外の値によって参照されるCERT_CONTEXTを解放します。

[in, out] pdwFlags

次のフラグを使用すると、返された証明書の検証チェックが有効になります。 ビットごとの OR 操作を使用して組み合わせて、複数の検証を有効にすることができます。

説明
CERT_STORE_NO_CRL_FLAG
一致する CRL が見つからなかったことが示されます。
CERT_STORE_NO_ISSUER_FLAG
発行者証明書が見つからなかったことが示されます。
CERT_STORE_REVOCATION_FLAG
サブジェクト証明書が発行者の失効リストに含まれているかどうかを確認します。
CERT_STORE_SIGNATURE_FLAG
発行者の証明書の公開キーを使用して、サブジェクト証明書の署名を確認します。
CERT_STORE_TIME_VALIDITY_FLAG
現在の時刻を取得し、サブジェクト証明書の有効期間内であることを確認します。
 

有効な型の検証チェックが成功した場合、そのフラグは 0 に設定されます。 失敗した場合、そのフラグは戻り時に設定されたままです。 CERT_STORE_REVOCATION_FLAGの場合、関数でサブジェクト証明書に関連する CRL が見つからない場合、検証は成功します。

CERT_STORE_REVOCATION_FLAGが設定されていて、発行者がストアに CRL を持っていない場合は、CERT_STORE_NO_CRL_FLAGが設定され、CERT_STORE_REVOCATION_FLAGが設定されたままになります。

CERT_STORE_SIGNATURE_FLAGまたはCERT_STORE_REVOCATION_FLAGが設定されている場合、関数がストア内の発行者証明書を見つけられない場合は、CERT_STORE_NO_ISSUER_FLAGが設定されます。 詳しくは、「注釈」をご覧ください。

検証チェック失敗した場合でも、発行者のCERT_CONTEXTへのポインターが返され、GetLastError は更新されません。

戻り値

関数が成功した場合、戻り値は読み取り専用発行者 CERT_CONTEXTへのポインターです。

関数が失敗し、最初または次の発行者証明書が見つからない場合、戻り値は NULL です

CertFreeCertificateContext を呼び出して、最後に返されたCERT_CONTEXT構造体のみを解放する必要があります。 関数の 1 回の呼び出しから返された CERT_CONTEXT が、後続の呼び出しで pPrevIssuerContext パラメーターとして指定されると、コンテキストは関数のアクションの一部として解放されます。

拡張エラー情報については、 GetLastError を呼び出します。 考えられるエラー コードの一部を次に示します。

リターン コード 説明
CRYPT_E_NOT_FOUND
サブジェクト証明書の発行者が見つかりませんでした。
CRYPT_E_SELF_SIGNED
発行者証明書は、サブジェクト証明書と同じです。 自己署名 ルート証明書です。
E_INVALIDARG
hCertStore パラメーターのハンドルは、pPrevIssuerContext パラメーターが指す証明書コンテキストのハンドルと同じではありません。または、pdwFlags でサポートされていないフラグが設定されています。

解説

返されたポインターは、関数の後続の呼び出しで pPrevIssuerContext パラメーターとして渡されると解放されます。 それ以外の場合は、 CertFreeCertificateContext を呼び出して、ポインターを明示的に解放する必要があります。 NULL ではない pPrevIssuerContext は、関数にエラーが発生した場合でも、CertFreeCertificateContext の呼び出しを使用して CertGetIssuerCertificateFromStore によって常に解放されます。

CertDuplicateCertificateContext を呼び出して、発行者証明書の複製を作成できます。

dwFlags の 16 進値は、ビットごとの OR 操作を使用して組み合わせて、複数の検証を有効にすることができます。 たとえば、署名と時刻の両方の有効性を有効にするには、0x00000003値が入力時に dwFlags に渡されます。 この場合、CERT_STORE_SIGNATURE_FLAG検証が成功しても検証CERT_STORE_TIME_VALIDITY_FLAG失敗した場合、 dwFlags は出力時に0x00000002としてを返します。

要件

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

関連項目

証明書関数