Fungsi CertGetCertificateChain (wincrypt.h)

Fungsi CertGetCertificateChain membangun konteks rantai sertifikat mulai dari sertifikat akhir dan kembali, jika memungkinkan, ke sertifikat akar tepercaya.

Sintaks

BOOL CertGetCertificateChain(
  [in, optional] HCERTCHAINENGINE     hChainEngine,
  [in]           PCCERT_CONTEXT       pCertContext,
  [in, optional] LPFILETIME           pTime,
  [in]           HCERTSTORE           hAdditionalStore,
  [in]           PCERT_CHAIN_PARA     pChainPara,
  [in]           DWORD                dwFlags,
  [in]           LPVOID               pvReserved,
  [out]          PCCERT_CHAIN_CONTEXT *ppChainContext
);

Parameter

[in, optional] hChainEngine

Handel mesin rantai (namespace dan cache) yang akan digunakan. Jika hChainEngine adalah NULL, mesin rantai default, HCCE_CURRENT_USER, digunakan. Parameter ini dapat diatur ke HCCE_LOCAL_MACHINE.

[in] pCertContext

Penunjuk ke CERT_CONTEXT sertifikat akhir, sertifikat yang rantainya sedang dibangun. Konteks sertifikat ini akan menjadi elemen nol indeks dalam rantai sederhana pertama.

[in, optional] pTime

Penunjuk ke variabel FILETIME yang menunjukkan waktu di mana rantai akan divalidasi. Perhatikan bahwa waktu tidak memengaruhi daftar kepercayaan, pencabutan, atau pemeriksaan penyimpanan akar. Waktu sistem saat ini digunakan jika NULL diteruskan ke parameter ini. Kepercayaan pada sertifikat tertentu menjadi akar tepercaya didasarkan pada status penyimpanan akar saat ini dan bukan status penyimpanan akar pada satu waktu yang diteruskan oleh parameter ini. Untuk pencabutan, daftar pencabutan sertifikat (CRL), itu sendiri, harus valid pada saat ini. Nilai parameter ini digunakan untuk menentukan apakah sertifikat yang tercantum dalam CRL telah dicabut.

[in] hAdditionalStore

Handel ke penyimpanan tambahan untuk mencari sertifikat pendukung dan daftar kepercayaan sertifikat (CCL). Parameter ini bisa NULL jika tidak ada penyimpanan tambahan yang akan dicari.

[in] pChainPara

Penunjuk ke struktur CERT_CHAIN_PARA yang mencakup parameter pembangun rantai.

[in] dwFlags

Bendera nilai yang menunjukkan pemrosesan khusus. Parameter ini bisa menjadi kombinasi dari satu atau beberapa bendera berikut.

Nilai Makna
CERT_CHAIN_CACHE_END_CERT
0x00000001
Ketika bendera ini diatur, sertifikat akhir di-cache, yang mungkin mempercepat proses pembuatan rantai. Secara default, sertifikat akhir tidak di-cache, dan perlu diverifikasi setiap kali rantai dibangun untuk itu.
CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY
0x80000000
Pemeriksaan pencabutan hanya mengakses URL yang di-cache.
CERT_CHAIN_REVOCATION_CHECK_OCSP_CERT
0x04000000
Bendera ini digunakan secara internal selama pembuatan rantai untuk sertifikat penanda tangan protokol status sertifikat online (OCSP) untuk mencegah pemeriksaan pencabutan siklik. Selama pembangunan rantai, jika respons OCSP ditandatangani oleh penanda tangan OCSP independen, maka, selain build rantai asli, ada rantai kedua yang dibangun untuk sertifikat penanda tangan OCSP itu sendiri. Bendera ini digunakan selama build rantai kedua ini untuk menghambat sertifikat penanda tangan OCSP independen rekursif. Jika sertifikat penanda tangan berisi ekstensi szOID_PKIX_OCSP_NOCHECK , pemeriksaan pencabutan dilewati untuk sertifikat penanda tangan daun. Pemeriksaan OCSP dan CRL diizinkan.

Windows Server 2003 dan Windows XP: Nilai ini tidak didukung.

CERT_CHAIN_CACHE_ONLY_URL_RETRIEVAL
0x00000004
Hanya menggunakan URL yang di-cache dalam membangun rantai sertifikat. Internet dan intranet tidak dicari untuk objek berbasis URL.

Catatan Bendera ini tidak berlaku untuk pemeriksaan pencabutan. Atur CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY untuk hanya menggunakan URL yang di-cache untuk pemeriksaan pencabutan.

CERT_CHAIN_DISABLE_PASS1_QUALITY_FILTERING
0x00000040
Untuk alasan performa, lulus kedua pembuatan rantai hanya mempertimbangkan jalur rantai potensial yang memiliki kualitas lebih besar dari atau sama dengan kualitas tertinggi yang ditentukan selama lulus pertama. Pass pertama hanya mempertimbangkan tanda tangan yang valid, rantai lengkap, dan akar tepercaya untuk menghitung kualitas rantai. Bendera ini dapat diatur untuk menonaktifkan pengoptimalan ini dan mempertimbangkan semua jalur rantai potensial selama pass kedua.
CERT_CHAIN_DISABLE_MY_PEER_TRUST
0x00000800
Bendera ini tidak didukung. Sertifikat di penyimpanan "Saya" tidak pernah dipertimbangkan untuk kepercayaan serekan.
CERT_CHAIN_ENABLE_PEER_TRUST
0x00000400
Sertifikat entitas akhir di penyimpanan "TrustedPeople" dipercaya tanpa melakukan pembangunan rantai apa pun. Fungsi ini tidak mengatur CERT_TRUST_IS_PARTIAL_CHAIN atau CERT_TRUST_IS_UNTRUSTED_ROOTbit anggota dwErrorStatus dari parameter ppChainContext . Windows Server 2003 Windows XP : Bendera ini tidak didukung.
CERT_CHAIN_OPT_IN_WEAK_SIGNATURE
0x00010000
Mengatur bendera ini menunjukkan pemanggil ingin memilih pemeriksaan tanda tangan yang lemah.

Bendera ini tersedia dalam pembaruan rollup untuk setiap OS yang dimulai dengan Windows 7 dan Windows Server 2008 R2.

CERT_CHAIN_RETURN_LOWER_QUALITY_CONTEXTS
0x00000080
Defaultnya adalah hanya mengembalikan jalur rantai kualitas tertinggi. Mengatur bendera ini akan mengembalikan rantai kualitas yang lebih rendah. Ini dikembalikan dalam bidang cLowerQualityChainContext dan rgpLowerQualityChainContext dari konteks rantai.
CERT_CHAIN_DISABLE_AUTH_ROOT_AUTO_UPDATE
0x00000100
Mengatur bendera ini menghambat pembaruan otomatis akar pihak ketiga dari Windows Update Web Server.
CERT_CHAIN_REVOCATION_ACCUMULATIVE_TIMEOUT
0x08000000
Saat Anda mengatur CERT_CHAIN_REVOCATION_ACCUMULATIVE_TIMEOUT dan Anda juga menentukan nilai untuk anggota dwUrlRetrievalTimeout dari struktur CERT_CHAIN_PARA , nilai yang Anda tentukan di dwUrlRetrievalTimeout mewakili batas waktu kumulatif di semua pengambilan URL pencabutan.

Jika Anda mengatur CERT_CHAIN_REVOCATION_ACCUMULATIVE_TIMEOUT tetapi tidak menentukan nilai dwUrlRetrievalTimeout , batas waktu kumulatif maksimum diatur, secara default, hingga 20 detik. Setiap URL yang diuji akan habis setelah setengah dari sisa saldo kumulatif telah berlalu. Artinya, WAKTU URL pertama habis setelah 10 detik, yang kedua setelah 5 detik, yang ketiga setelah 2,5 detik dan seterusnya sampai URL berhasil, 20 detik telah berlalu, atau tidak ada LAGI URL untuk diuji.

Jika Anda tidak mengatur CERT_CHAIN_REVOCATION_ACCUMULATIVE_TIMEOUT, setiap URL pencabutan dalam rantai diberi batas waktu maksimum yang sama dengan nilai yang ditentukan dalam dwUrlRetrievalTimeout. Jika Anda tidak menentukan nilai untuk anggota dwUrlRetrievalTimeout , setiap URL pencabutan diberi batas waktu default maksimum 15 detik. Jika tidak ada URL yang berhasil, nilai batas waktu kumulatif maksimum adalah 15 detik dikalikan dengan jumlah URL dalam rantai.

Anda dapat mengatur nilai default dengan menggunakan Kebijakan Grup.

CERT_CHAIN_TIMESTAMP_TIME
0x00000200
Ketika bendera ini diatur, pTime digunakan sebagai waktu stempel waktu untuk menentukan apakah sertifikat akhir valid. Waktu saat ini juga dapat digunakan untuk menentukan apakah sertifikat akhir tetap valid waktu. Semua otoritas sertifikasi (CA) dan sertifikat akar lainnya dalam rantai diperiksa dengan menggunakan waktu saat ini dan bukan pTime.
CERT_CHAIN_DISABLE_AIA
0x00002000
Mengatur bendera ini secara eksplisit menonaktifkan pengambilan Authority Information Access (AIA).
 

Anda juga dapat mengatur bendera pencabutan berikut, tetapi hanya satu bendera dari grup ini yang dapat diatur pada satu waktu.

Nilai Makna
CERT_CHAIN_REVOCATION_CHECK_END_CERT
0x10000000
Pemeriksaan pencabutan dilakukan pada sertifikat akhir dan hanya sertifikat akhir.
CERT_CHAIN_REVOCATION_CHECK_CHAIN
0x20000000
Pemeriksaan pencabutan dilakukan pada semua sertifikat di setiap rantai.
CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT
0x40000000
Pemeriksaan pencabutan dilakukan pada semua sertifikat di semua rantai kecuali sertifikat akar.

[in] pvReserved

Parameter ini dicadangkan dan harus NULL.

[out] ppChainContext

Alamat penunjuk ke konteks rantai yang dibuat. Setelah Anda selesai menggunakan konteks rantai, lepaskan rantai dengan memanggil fungsi CertFreeCertificateChain .

Mengembalikan nilai

Jika fungsi berhasil, fungsi mengembalikan bukan nol (TRUE).

Jika fungsi gagal, fungsi akan mengembalikan nol (FALSE). Untuk informasi kesalahan yang diperluas, hubungi GetLastError.

Keterangan

Ketika aplikasi meminta rantai sertifikat, struktur yang dikembalikan dalam bentuk CERT_CHAIN_CONTEXT. Konteks ini berisi array struktur CERT_SIMPLE_CHAIN di mana setiap rantai sederhana beralih dari sertifikat akhir ke sertifikat yang ditandatangani sendiri. Konteks rantai menghubungkan rantai sederhana melalui daftar kepercayaan. Setiap rantai sederhana berisi rantai sertifikat, ringkasan informasi kepercayaan tentang rantai, dan informasi kepercayaan tentang setiap elemen sertifikat dalam rantai.

Keterangan berikut berlaku untuk pemeriksaan tanda tangan yang kuat:

  • Anda dapat mengaktifkan pemeriksaan tanda tangan yang kuat untuk fungsi ini dengan mengatur anggota pStrongSignPara dari struktur CERT_CHAIN_PARA yang diarahkan oleh parameter pChainPara .
  • Jika sertifikat tanpa tanda tangan yang kuat ditemukan dalam rantai, kesalahan CERT_TRUST_HAS_WEAK_SIGNATURE dan CERT_TRUST_IS_NOT_SIGNATURE_VALID diatur di bidang dwErrorStatus dari struktur CERT_TRUST_STATUS . Parameter ppChainContext menunjuk ke struktur CERT_CHAIN_CONTEXT yang, pada gilirannya, menunjuk ke struktur CERT_TRUST_STATUS .
  • Jika rantai ditandatangani dengan kuat, kunci publik di akhir sertifikat diperiksa untuk menentukan apakah rantai memenuhi persyaratan panjang kunci publik minimum untuk tanda tangan yang kuat. Jika kondisi tidak terpenuhi, kesalahan CERT_TRUST_HAS_WEAK_SIGNATURE dan CERT_TRUST_IS_NOT_SIGNATURE_VALID diatur di bidang dwErrorStatus dari struktur CERT_TRUST_STATUS . Untuk menonaktifkan pemeriksaan panjang kunci, atur nilai CERT_CHAIN_STRONG_SIGN_DISABLE_END_CHECK_FLAG di anggota dwStrongSignFlags dari struktur CERT_CHAIN_PARA yang diarahkan oleh parameter pChainPara .
  • Jika bendera CERT_STRONG_SIGN_ENABLE_CRL_CHECK atau CERT_STRONG_SIGN_ENABLE_OCSP_CHECK diatur dalam struktur CERT_STRONG_SIGN_SERIALIZED_INFO dan respons CRL atau OCSP ditemukan tanpa tanda tangan yang kuat, respons CRL atau OCSP akan diperlakukan offline. Artinya, kesalahan CERT_TRUST_IS_OFFLINE_REVOCATION dan CERT_TRUST_REVOCATION_STATUS_UNKNOWN diatur di bidang dwErrorStatus dari struktur CERT_TRUST_STATUS . Selain itu, anggota dwRevocationResult dari struktur CERT_REVOCATION_INFO diatur ke NTE_BAD_ALGID.

Contoh

Untuk contoh yang menggunakan fungsi ini, lihat Contoh Program C: Membuat Rantai Sertifikat.

Persyaratan

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

Lihat juga

CERT_CHAIN_PARA

CertDuplicateCertificateChain

CertFreeCertificateChain

Fungsi Verifikasi Rantai Sertifikat