Saya memiliki sertifikat root dan daun. Daun tersebut memiliki ekstensi OID URL CRL yang menunjuk ke lokasi online yang valid. Melakukan ini:
certutil -verify .\leaf.cer
gagal dengan
KESALAHAN: Memverifikasi status pencabutan sertifikat daun dikembalikan Fungsi pencabutan tidak dapat memeriksa pencabutan karena server pencabutan sedang offline. 0x80092013 (-2146885613 CRYPT_E_REVOCATION_OFFLINE)
Jika saya melakukan ini:
certutil -verify .\leaf.cer .\root.cer
Kemudian verifikasi lolos, dan saya melihat CRL ditarik dari online di Fiddler.
Dalam kode C# saya, saya melakukan ini:
X509Chain childCertChain = new X509Chain();
childCertChain.ChainPolicy.ExtraStore.Add(rootCert);
childCertChain.ChainPolicy.RevocationMode = X509RevocationMode.Online;
childCertChain.ChainPolicy.UrlRetrievalTimeout = TimeSpan.FromSeconds(10);
if (!childCertChain.Build(childCert))
{
// The root cert is not in the windows certificate store, that is fine
if (childCertChain.ChainStatus.Length != 1 || childCertChain.ChainStatus.First().Status != X509ChainStatusFlags.UntrustedRoot)
{
throw new Exception("Certificate validation error.");
}
}
Ini akan menjadi pengecualian saya, dan meskipun chainElements akan diisi dengan 2 sertifikat dengan benar, ChainStatus akan menampilkan:
OfflineRevocation, RevocationStatusTidak Diketahui
Saya juga tidak akan melihat permintaan web apa pun di Fiddler. Saya dapat mengunduh CRL secara terprogram dengan memberikan URL-nya sehingga ini bukan lingkungan debug saya AFAIK. Adakah ide bagaimana agar x509Chain.Build berhasil?
chain.ChainElements
? - person Crypt32   schedule 08.04.2020certutil -verify -urlfetch cert.cer
. Periksa apakah semua URL baik-baik saja, atau lebih baik lagi, posting keluaran certutil. - person Crypt32   schedule 08.04.2020-urlfetch
? - person Crypt32   schedule 08.04.2020