ฉันมีใบรับรองหลักและใบไม้ Leaf มีส่วนขยาย CRL URL OID ซึ่งชี้ไปยังตำแหน่งออนไลน์ที่ถูกต้อง ทำสิ่งนี้:
certutil -verify .\leaf.cer
ล้มเหลวด้วย
ข้อผิดพลาด: การตรวจสอบสถานะการเพิกถอนใบรับรอง leaf ที่ส่งคืน ฟังก์ชันการเพิกถอนไม่สามารถตรวจสอบการเพิกถอนได้เนื่องจากเซิร์ฟเวอร์การเพิกถอนอยู่ในสถานะออฟไลน์ 0x80092013 (-2146885613 CRYPT_E_REVOCATION_OFFLINE)
ถ้าฉันทำสิ่งนี้:
certutil -verify .\leaf.cer .\root.cer
จากนั้นการยืนยันก็ผ่าน และฉันเห็นว่า CRL ถูกดึงออกจากออนไลน์ใน Fiddler
ในโค้ด C# ของฉัน ฉันทำสิ่งนี้:
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.");
}
}
สิ่งนี้จะเข้าข่ายข้อยกเว้นของฉัน และแม้ว่า chainElements จะถูกเติมด้วยใบรับรอง 2 รายการอย่างถูกต้อง แต่ ChainStatus จะแสดง:
การเพิกถอนแบบออฟไลน์, สถานะการเพิกถอน ไม่ทราบ
ฉันจะไม่เห็นคำขอทางเว็บใด ๆ ใน Fiddler ฉันสามารถดาวน์โหลด CRL โดยทางโปรแกรมโดยใช้ URL ดังนั้นจึงไม่ใช่สภาพแวดล้อมการแก้ไขข้อบกพร่อง AFAIK ของฉัน มีแนวคิดใดบ้างที่จะทำให้ x509Chain.Build ประสบความสำเร็จ?
chain.ChainElements
- person Crypt32   schedule 08.04.2020certutil -verify -urlfetch cert.cer
พูดว่าอะไร ตรวจสอบว่า URL ทั้งหมดใช้งานได้หรือไม่ หรือดีกว่านั้นหลังผลลัพธ์ Certutil - person Crypt32   schedule 08.04.2020-urlfetch
? - person Crypt32   schedule 08.04.2020