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されている場合、rgpvContext はCERT_CONTEXT構造体へのポインターの配列です。 これらのコンテキストには、インストール可能または登録済みの失効 DLL が失効サーバーを見つけられるように十分な情報が含まれている必要があります。 通常、この情報は、PKIX パート 1 のインターネット エンジニアリング タスク フォース (IETF) によって定義された CRLDistributionsPoints 拡張機能などの拡張機能で伝達されます。
効率を高める場合、一度に渡されるコンテキストが多いほど、より優れています。
[in] dwFlags
特別な処理のニーズを示します。 このパラメーターには、次のいずれかのフラグを指定できます。
値 | 意味 |
---|---|
|
証明書のチェーンの検証は、最初の証明書が証明書の前にある証明書の発行者であることを除き、各証明書を前提として行われます。 dwRevType がCERT_CONTEXT_REVOCATION_TYPEされていない場合、コンテキストの順序に関する想定は行われません。 |
|
失効ハンドラーが失効チェックのためにネットワーク ベースのリソースにアクセスできないようにします。 |
|
設定すると、 dwUrlRetrievalTimeout は、すべての URL ワイヤ取得の累積タイムアウトです。 |
|
この関数を設定すると、失効チェックに オンライン証明書状態プロトコル (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 には、次のいずれかの値を指定できます。
値 | 説明 |
---|---|
|
インストール済みまたは登録済みの失効関数が、コンテキストに対して失効チェックを実行できませんでした。 |
|
失効を確認できたインストール済みまたは登録済みの DLL が見つかりませんでした。 |
|
確認するコンテキストが失効サーバーのデータベースに見つかりませんでした。 |
|
失効サーバーに接続できませんでした。 |
|
コンテキストが取り消されました。 pRevStatus の dwReason には、失効の理由が含まれています。 |
|
コンテキストは良好でした。 |
|
pRevStatus の cbSize が sizeof(CERT_REVOCATION_STATUS) 未満です。 pRevStatus の dwError は、このエラーに対して更新されないことに注意してください。 |
注釈
次の例は、失効検証の問題が発生したときに pRevStatus がどのように更新されるかを示しています。
cContext が 4 の場合を考えてみましょう。
CertVerifyRevocation で rgpvContext[0] と rgpvContext[1] が取り消されていないことを確認できますが、rgpvContext[2] をチェックできない場合、pRevStatus メンバー dwIndex は 2 に設定され、インデックス 2 のコンテキストに問題があることを示し、pRevStatus の dwError メンバーがCRYPT_E_NO_REVOCATION_CHECKに設定され、FALSE が返されます。
rgpvContext[2] が取り消された場合、pRevStatus の dwIndex メンバーが 2 に設定され、pRevStatus の dwError メンバーが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 |