Fungsi CryptVerifyCertificateSignatureEx (wincrypt.h)

Fungsi CryptVerifyCertificateSignatureEx memverifikasi tanda tangan sertifikat subjek, daftar pencabutan sertifikat, permintaan sertifikat, atau permintaan keygen dengan menggunakan kunci publik penerbit. Fungsi ini tidak memerlukan akses ke kunci privat.

Sintaks

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
);

Parameter

[in] hCryptProv

Parameter ini tidak digunakan dan harus diatur ke NULL.

Windows Server 2003 dan Windows XP: Handel ke penyedia layanan kriptografi yang digunakan untuk memverifikasi tanda tangan. Jenis data parameter ini adalah HCRYPTPROV.

NULL diteruskan kecuali ada alasan kuat untuk melewati penyedia kriptografi tertentu. Meneruskan NULL menyebabkan penyedia RSA atau DSS default diperoleh.

[in] dwCertEncodingType

Jenis pengodean sertifikat yang digunakan untuk mengenkripsi subjek. Pengidentifikasi jenis pengodean pesan, yang terkandung dalam WORD tinggi dari nilai ini, diabaikan oleh fungsi ini.

Parameter ini dapat menjadi jenis pengodean sertifikat yang saat ini ditentukan berikut.

Nilai Makna
X509_ASN_ENCODING
1 (0x1)
Menentukan pengodean sertifikat X.509.

[in] dwSubjectType

Jenis subjek. Parameter ini bisa menjadi salah satu jenis subjek berikut.

Nilai Makna
CRYPT_VERIFY_CERT_SIGN_SUBJECT_BLOB
1 (0x1)
pvSubject adalah penunjuk ke struktur CRYPT_DATA_BLOB .
CRYPT_VERIFY_CERT_SIGN_SUBJECT_CERT
2 (0x2)
pvSubject adalah penunjuk ke struktur CCERT_CONTEXT .
CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL
3 (0x3)
pvSubject adalah penunjuk ke struktur CCRL_CONTEXT .
CRYPT_VERIFY_CERT_SIGN_SUBJECT_OCSP_BASIC_SIGNED_RESPONSE
4 (0x4)
pvSubject adalah penunjuk ke struktur OCSP_BASIC_SIGNED_RESPONSE_INFO .

Windows Server 2003 dan Windows XP: Jenis subjek ini tidak didukung.

[in] pvSubject

Penunjuk ke struktur jenis yang ditunjukkan oleh dwSubjectType yang berisi tanda tangan yang akan diverifikasi.

[in] dwIssuerType

Jenis pengeluar sertifikat. Parameter ini bisa menjadi salah satu jenis pengeluar sertifikat berikut.

Nilai Makna
CRYPT_VERIFY_CERT_SIGN_ISSUER_PUBKEY
1 (0x1)
pvIssuer adalah penunjuk ke struktur CERT_PUBLIC_KEY_INFO .
CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT
2 (0x2)
pvIssuer adalah penunjuk ke struktur CCERT_CONTEXT .
CRYPT_VERIFY_CERT_SIGN_ISSUER_CHAIN
3 (0x3)
pvIssuer adalah penunjuk ke struktur CCERT_CHAIN_CONTEXT .
CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL
4 (0x4)
pvIssuer harus NULL.
 
Catatan Jika dwIssuerTypeCRYPT_VERIFY_CERT_SIGN_ISSUER_NULL dan algoritma tanda tangan adalah algoritma hash, tanda tangan diharapkan hanya berisi oktet hash yang tidak terenkripsi. Hanya CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL yang dapat ditentukan dalam kasus tanda tangan yang tidak terenkripsi ini. Jika ada dwIssuerType lain yang ditentukan, verifikasi gagal dan GetLastError mengembalikan E_INVALIDARG.
 

[in] pvIssuer

Penunjuk ke struktur jenis yang ditunjukkan oleh nilai dwIssuerType. Struktur berisi akses ke kunci publik yang diperlukan untuk memverifikasi tanda tangan.

[in] dwFlags

Bendera yang mengubah perilaku fungsi. Ini bisa nol atau bitwise ATAU dari nilai berikut.

Nilai Makna
CRYPT_VERIFY_CERT_SIGN_DISABLE_MD2_MD4_FLAG
0x00000001
Jika Anda mengatur bendera ini dan CryptVerifyCertificateSignatureEx mendeteksi algoritma MD2 atau MD4, fungsi mengembalikan FALSE dan mengatur GetLastError ke NTE_BAD_ALGID. Tanda tangan masih diverifikasi, tetapi kombinasi kesalahan ini memungkinkan pemanggil, sekarang mengetahui bahwa algoritma MD2 atau MD4 digunakan, untuk memutuskan apakah akan mempercayai atau menolak tanda tangan.

Windows 8 dan Windows Server 2012: Dukungan untuk bendera ini dimulai.

CRYPT_VERIFY_CERT_SIGN_SET_STRONG_PROPERTIES_FLAG
0x00000002
Mengatur properti tanda tangan yang kuat, setelah verifikasi berhasil, pada subjek yang diacu oleh parameter pvSubject .

Properti berikut diatur pada konteks sertifikat:

  • CERT_SIGN_HASH_CNG_ALG_PROP_ID
Properti berikut diatur pada konteks CRL:
  • CERT_SIGN_HASH_CNG_ALG_PROP_ID
  • CERT_ISSUER_PUB_KEY_BIT_LENGTH_PROP_ID
Catatan Bendera ini hanya berlaku jika CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL ditentukan dalam parameter dwSubjectType .
 
Windows 8 dan Windows Server 2012: Dukungan untuk bendera ini dimulai.
CRYPT_VERIFY_CERT_SIGN_RETURN_STRONG_PROPERTIES_FLAG
0x00000004
Mengembalikan penunjuk ke struktur CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO dalam parameter pvExtra . Struktur berisi panjang, dalam bit, kunci umum dan nama algoritma penandatanganan dan hash yang digunakan.

Anda harus memanggil CryptMemFree untuk membebaskan struktur. Jika memori tidak dapat dialokasikan untuk struktur CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO , fungsi ini berhasil dikembalikan tetapi mengatur parameter pvExtra ke NULL.

Catatan Bendera ini hanya berlaku jika CRYPT_VERIFY_CERT_SIGN_SUBJECT_OCSP_BASIC_SIGNED_RESPONSE ditentukan dalam parameter dwSubjectType .
 
Windows 8 dan Windows Server 2012: Dukungan untuk bendera ini dimulai.

[in, out, optional] pvExtra

Arahkan ke struktur CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO jika parameter dwFlags diatur ke CRYPT_VERIFY_CERT_SIGN_RETURN_STRONG_PROPERTIES_FLAG.

Anda harus memanggil CryptMemFree untuk membebaskan struktur.

Nilai kembali

Mengembalikan bukan nol jika berhasil atau nol sebaliknya.

Untuk informasi kesalahan yang diperluas, hubungi GetLastError.

Catatan Kesalahan dari fungsi yang disebut CryptCreateHash, CryptImportKey, CryptVerifySignature, dan CryptHashData dapat disebarluaskan ke fungsi ini.
 
Jika gagal, fungsi ini akan menyebabkan kode kesalahan berikut dikembalikan dari GetLastError.
Menampilkan kode Deskripsi
ERROR_FILE_NOT_FOUND
Tipe pengodean sertifikat tidak valid. Saat ini hanya X509_ASN_ENCODING yang didukung.
NTE_BAD_ALGID
Pengidentifikasi objek algoritma tanda tangan (OID) tidak memetakan ke algoritma hash yang diketahui atau didukung.
NTE_BAD_SIGNATURE
Tanda tangan tidak valid.
 

Jika fungsi gagal, GetLastError dapat mengembalikan kesalahan pengodean/pendekodean Abstract Syntax Notation One (ASN.1). Untuk informasi tentang kesalahan ini, lihat Nilai Pengembalian Pengodean/Pendekodean ASN.1.

Keterangan

Buffer subjek dapat berisi BLOB yang dikodekan atau konteks untuk sertifikat atau CRL. Dalam kasus konteks sertifikat, jika parameter kunci publik sertifikat hilang dan jika parameter ini dapat diwarisi dari penerbit sertifikat misalnya dari parameter kunci publik DSS, properti CERT_PUBKEY_ALG_PARA_PROP_ID konteks diperbarui dengan parameter algoritma kunci publik penerbit untuk tanda tangan yang valid.

Persyaratan

   
Klien minimum yang didukung Windows XP [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2003 [hanya aplikasi desktop]
Target Platform Windows
Header wincrypt.h
Pustaka Crypt32.lib
DLL Crypt32.dll

Lihat juga

CryptVerifyCertificateSignature