CryptVerifyCertificateSignatureEx 関数 (wincrypt.h)

CryptVerifyCertificateSignatureEx 関数は、発行者の公開キーを使用して、サブジェクト証明書、証明書失効リスト証明書要求、または keygen 要求の署名を検証します。 この関数では、 秘密キーへのアクセスは必要ありません。

構文

BOOL CryptVerifyCertificateSignatureEx(
  [in]                HCRYPTPROV_LEGACY hCryptProv,
  [in]                DWORD             dwCertEncodingType,
  [in]                DWORD             dwSubjectType,
  [in]                void              *pvSubject,
  [in]                DWORD             dwIssuerType,
  [in]                void              *pvIssuer,
  [in]                DWORD             dwFlags,
  [in, out, optional] void              *pvExtra
);

パラメーター

[in] hCryptProv

このパラメーターは使用されず、 NULL に設定する必要があります。

Windows Server 2003 および Windows XP: 署名の検証に使用される 暗号化サービス プロバイダー へのハンドル。このパラメーターのデータ型は HCRYPTPROV です

特定 の暗号化プロバイダーを渡す強力な理由がない限り、NULL が渡されます。 NULL を渡すと、既定の RSA または DSS プロバイダーが取得されます。

[in] dwCertEncodingType

サブジェクトの暗号化に使用された 証明書エンコードの種類 。 この値の高い WORD に含まれるメッセージ エンコード型識別子は、この関数では無視されます。

このパラメーターには、現在定義されている次の証明書エンコードの種類を指定できます。

説明
X509_ASN_ENCODING
1 (0x1)
X.509 証明書のエンコードを指定します。

[in] dwSubjectType

件名の種類。 このパラメーターには、次のいずれかの種類のサブジェクトを指定できます。

説明
CRYPT_VERIFY_CERT_SIGN_SUBJECT_BLOB
1 (0x1)
pvSubject は、 CRYPT_DATA_BLOB 構造体へのポインターです。
CRYPT_VERIFY_CERT_SIGN_SUBJECT_CERT
2 (0x2)
pvSubject は、 CCERT_CONTEXT 構造体へのポインターです。
CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL
3 (0x3)
pvSubject は、 CCRL_CONTEXT 構造体へのポインターです。
CRYPT_VERIFY_CERT_SIGN_SUBJECT_OCSP_BASIC_SIGNED_RESPONSE
4 (0x4)
pvSubject は、 OCSP_BASIC_SIGNED_RESPONSE_INFO 構造体へのポインターです。

Windows Server 2003 および Windows XP: このサブジェクトの種類はサポートされていません。

[in] pvSubject

検証対象のシグネチャを含む dwSubjectType によって示される型の構造体へのポインター。

[in] dwIssuerType

発行者の種類。 このパラメーターには、次のいずれかの発行者の種類を指定できます。

説明
CRYPT_VERIFY_CERT_SIGN_ISSUER_PUBKEY
1 (0x1)
pvIssuer は、 CERT_PUBLIC_KEY_INFO 構造体へのポインターです。
CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT
2 (0x2)
pvIssuer は、 CCERT_CONTEXT 構造体へのポインターです。
CRYPT_VERIFY_CERT_SIGN_ISSUER_CHAIN
3 (0x3)
pvIssuer は、 CCERT_CHAIN_CONTEXT 構造体へのポインターです。
CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL
4 (0x4)
pvIssuerNULL である必要があります。
 
メモdwIssuerTypeCRYPT_VERIFY_CERT_SIGN_ISSUER_NULLされ、署名アルゴリズムがハッシュ アルゴリズムである場合、署名には暗号化されていないハッシュ オクテットのみが含まれると想定されます。 この暗号化されていない署名ケースでは、 CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL のみを指定できます。 他の dwIssuerType が指定されている場合、検証は失敗し、 GetLastError は E_INVALIDARGを返します。
 

[in] pvIssuer

dwIssuerType の値によって示される型の構造体へのポインター。 構造体には、署名を確認するために必要な公開キーへのアクセスが含まれています。

[in] dwFlags

関数の動作を変更するフラグ。 次の値の 0 またはビットごとの OR を指定できます。

説明
CRYPT_VERIFY_CERT_SIGN_DISABLE_MD2_MD4_FLAG
0x00000001
このフラグを設定し、 CryptVerifyCertificateSignatureEx が MD2 または MD4 アルゴリズムを検出した場合、関数は FALSE を 返し、 GetLastErrorNTE_BAD_ALGIDに設定します。 署名は引き続き検証されますが、このエラーの組み合わせにより、呼び出し元は MD2 または MD4 アルゴリズムが使用されたことを認識して、署名を信頼するか拒否するかを決定できます。

Windows 8 と Windows Server 2012: このフラグのサポートが開始されます。

CRYPT_VERIFY_CERT_SIGN_SET_STRONG_PROPERTIES_FLAG
0x00000002
検証が成功した後、 pvSubject パラメーターが指すサブジェクトに対して強力な署名プロパティを設定します。

証明書コンテキストでは、次のプロパティが設定されます。

  • CERT_SIGN_HASH_CNG_ALG_PROP_ID
CRL コンテキストでは、次のプロパティが設定されます。
  • CERT_SIGN_HASH_CNG_ALG_PROP_ID
  • CERT_ISSUER_PUB_KEY_BIT_LENGTH_PROP_ID
メモこのフラグは、dwSubjectType パラメーターにCRYPT_VERIFY_CERT_SIGN_SUBJECT_CRLが指定されている場合にのみ適用されます。
 
Windows 8 と Windows Server 2012: このフラグのサポートが開始されます。
CRYPT_VERIFY_CERT_SIGN_RETURN_STRONG_PROPERTIES_FLAG
0x00000004
pvExtra パラメーター内のCRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO構造体へのポインターを返します。 構造体には、公開キーの長さ (ビット単位) と、使用される署名アルゴリズムとハッシュ アルゴリズムの名前が含まれます。

構造体を解放するには 、CryptMemFree を呼び出す必要があります。 CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO構造体にメモリを割り当てることができない場合、この関数は正常にを返しますが、pvExtra パラメーターを NULL に設定します。

メモこのフラグは、dwSubjectType パラメーターでCRYPT_VERIFY_CERT_SIGN_SUBJECT_OCSP_BASIC_SIGNED_RESPONSEが指定されている場合にのみ適用されます。
 
Windows 8 と Windows Server 2012: このフラグのサポートが開始されます。

[in, out, optional] pvExtra

dwFlags パラメーターが CRYPT_VERIFY_CERT_SIGN_RETURN_STRONG_PROPERTIES_FLAG に設定されている場合は、CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO構造体へのポインター。

構造体を解放するには 、CryptMemFree を呼び出す必要があります。

戻り値

成功した場合は 0 以外、それ以外の場合は 0 を返します。

拡張エラー情報については、 GetLastError を呼び出します。

メモ 呼び出された関数 CryptCreateHashCryptImportKeyCryptVerifySignatureおよび CryptHashData からのエラーは、この関数に反映される可能性があります。
 
失敗した場合、この関数は GetLastError から次のエラー コードを返します。
リターン コード 説明
ERROR_FILE_NOT_FOUND
証明書のエンコードの種類が無効です。 現在 、X509_ASN_ENCODING のみがサポートされています。
NTE_BAD_ALGID
署名アルゴリズムの オブジェクト識別子 (OID) は、既知またはサポートされている ハッシュ アルゴリズムにマップされません。
NTE_BAD_SIGNATURE
署名が無効でした。
 

関数が失敗した場合、GetLastError は抽象構文表記 1 (ASN.1) エンコード/デコード エラーを返す可能性があります。 これらのエラーの詳細については、「 ASN.1 エンコード/デコードの戻り値」を参照してください。

解説

サブジェクト バッファーには、エンコードされた BLOB または証明書または CRL のコンテキストを含めることができます。 証明書コンテキストの場合、証明書の公開キー パラメーターが欠落していて、これらのパラメーターを証明書の発行者から継承できる場合 (DSS 公開キー パラメーターなど) は、コンテキストの CERT_PUBKEY_ALG_PARA_PROP_ID プロパティが、有効な署名の発行者の公開キー アルゴリズム パラメーターで更新されます。

要件

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

関連項目

CryptVerifyCertificateSignature