CertVerifyRevocation 関数 (wincrypt.h)

CertVerifyRevocation 関数は、rgpvContext 配列に含まれる証明書の失効状態を確認します。 リスト内の証明書が失効していることが判明した場合、それ以上のチェックは行われません。 この配列は、エンド エンティティから ルート機関に上位に伝達される証明書のチェーンである可能性がありますが、証明書の一覧のこの性質は必要ありません。また、想定もされていません。

構文

BOOL CertVerifyRevocation(
  [in]           DWORD                   dwEncodingType,
  [in]           DWORD                   dwRevType,
  [in]           DWORD                   cContext,
  [in]           PVOID []                rgpvContext,
  [in]           DWORD                   dwFlags,
  [in, optional] PCERT_REVOCATION_PARA   pRevPara,
  [in, out]      PCERT_REVOCATION_STATUS pRevStatus
);

パラメーター

[in] dwEncodingType

使用するエンコードの種類を指定します。 現在、X509_ASN_ENCODINGとPKCS_7_ASN_ENCODINGのみが使用されています。ただし、今後、エンコードの種類が追加される可能性があります。 現在のエンコードの種類の場合は、X509_ASN_ENCODING |PKCS_7_ASN_ENCODING。

[in] dwRevType

rgpvContext で渡されるコンテキスト構造の型を示します。 現在、証明書の失効CERT_CONTEXT_REVOCATION_TYPEのみが定義されています。

[in] cContext

rgpvContext 配列内の要素の数。

[in] rgpvContext

dwRevType がCERT_CONTEXT_REVOCATION_TYPEされている場合、rgpvContextCERT_CONTEXT構造体へのポインターの配列です。 これらのコンテキストには、インストール可能または登録済みの失効 DLL が失効サーバーを見つけられるように十分な情報が含まれている必要があります。 通常、この情報は、PKIX パート 1 のインターネット エンジニアリング タスク フォース (IETF) によって定義された CRLDistributionsPoints 拡張機能などの拡張機能で伝達されます。

効率を高める場合、一度に渡されるコンテキストが多いほど、より優れています。

[in] dwFlags

特別な処理のニーズを示します。 このパラメーターには、次のいずれかのフラグを指定できます。

意味
CERT_VERIFY_REV_CHAIN_FLAG
証明書のチェーンの検証は、最初の証明書が証明書の前にある証明書の発行者であることを除き、各証明書を前提として行われます。 dwRevType がCERT_CONTEXT_REVOCATION_TYPEされていない場合、コンテキストの順序に関する想定は行われません。
CERT_VERIFY_CACHE_ONLY_BASED_REVOCATION
失効ハンドラーが失効チェックのためにネットワーク ベースのリソースにアクセスできないようにします。
CERT_VERIFY_REV_ACCUMULATIVE_TIMEOUT_FLAG
設定すると、 dwUrlRetrievalTimeout は、すべての URL ワイヤ取得の累積タイムアウトです。
CERT_VERIFY_REV_SERVER_OCSP_FLAG
この関数を設定すると、失効チェックに オンライン証明書状態プロトコル (OCSP) のみが使用されます。 証明書に OCSP AIA URL がない場合、pRevStatus パラメーターの dwError メンバーは CRYPT_E_NOT_IN_REVOCATION_DATABASE に設定されます。

[in, optional] pRevPara

必要に応じて、発行者の検索に役立つ を設定します。 詳細については、CERT_REVOCATION_PARA構造に 関するページを 参照してください。

[in, out] pRevStatus

CertVerifyRevocation が呼び出される前に、pRevStatus が指すCERT_REVOCATION_STATUSの cbSize メンバーのみを設定する必要があります。

関数が FALSE を返す場合、この構造体のメンバーにはエラー状態情報が含まれます。 詳細については、「 CERT_REVOCATION_STATUS」を参照してください。 失効検証の問題が発生したときに pRevStatus がどのように更新されるかについては、「解説」を参照してください。

戻り値

関数がすべてのコンテキストを正常にチェックし、取り消されなかった場合、関数は TRUE を返します。 関数が失敗した場合、関数は FALSE を 返し、「 CERT_REVOCATION_STATUS 」で説明されているように pRevStatus が指すCERT_REVOCATION_STATUS構造体 更新します。

いずれかのコンテキストの失効ハンドラーがエラーのために FALSE を返すと、pRevStatus が指す構造体の dwError メンバーがハンドラーによって設定され、発生したエラーが指定されます。 GetLastError はCERT_REVOCATION_STATUS構造体の dwError メンバーで指定されたエラーと等しいエラー コードを返します。 GetLastError には、次のいずれかの値を指定できます。

説明
CRYPT_E_NO_REVOCATION_CHECK
インストール済みまたは登録済みの失効関数が、コンテキストに対して失効チェックを実行できませんでした。
CRYPT_E_NO_REVOCATION_DLL
失効を確認できたインストール済みまたは登録済みの DLL が見つかりませんでした。
CRYPT_E_NOT_IN_REVOCATION_DATABASE
確認するコンテキストが失効サーバーのデータベースに見つかりませんでした。
CRYPT_E_REVOCATION_OFFLINE
失効サーバーに接続できませんでした。
CRYPT_E_REVOKED
コンテキストが取り消されました。 pRevStatusdwReason には、失効の理由が含まれています。
ERROR_SUCCESS
コンテキストは良好でした。
E_INVALIDARG
pRevStatuscbSize が sizeof(CERT_REVOCATION_STATUS) 未満です。 pRevStatusdwError は、このエラーに対して更新されないことに注意してください。

注釈

次の例は、失効検証の問題が発生したときに pRevStatus がどのように更新されるかを示しています。

cContext が 4 の場合を考えてみましょう。

CertVerifyRevocationrgpvContext[0] と rgpvContext[1] が取り消されていないことを確認できますが、rgpvContext[2] をチェックできない場合、pRevStatus メンバー dwIndex は 2 に設定され、インデックス 2 のコンテキストに問題があることを示し、pRevStatusdwError メンバーがCRYPT_E_NO_REVOCATION_CHECKに設定され、FALSE が返されます。

rgpvContext[2] が取り消された場合、pRevStatusdwIndex メンバーが 2 に設定され、pRevStatusdwError メンバーがCRYPT_E_REVOKEDに設定され、dwReason が更新され、FALSE が返されます。

どちらの場合も、 rgpvContext[0] と rgpvContext[1] の両方が取り消されないことが確認され、 rgpvContext[2] は最後にチェックされた配列インデックスであり、 rgpvContext[3] はまったくチェックされていません。

要件

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

こちらもご覧ください

CERT_CONTEXT

CERT_REVOCATION_PARA

CERT_REVOCATION_STATUS

CertVerifyCRLTimeValidity

CertVerifyTimeValidity

CertVerifyValidityNesting

データ管理関数