我目前正致力於使用HTTPS優化相互驗證的客戶端/服務器應用程序之間的通信。我目前正在將驗證邏輯構建到C#客戶端中,以幫助識別TLS連接失敗時的配置問題。在驗證連接時,我驗證服務器提供的根CA證書安裝在客戶端,相應的存儲區中並且有效。我正在使用X509Store
來拉動X509Certificate2
,並使用X509Chain
進行驗證。使用C#,如何以編程方式確定Windows證書存儲區中的證書是否已被禁用
我的問題是即使證書已通過MMC禁用,證書也會報告爲有效。因此,儘管鏈式報告是有效的,但TLS連接將失敗。
這是一個不太可能的情況下,只有一個我想通過報告類似處理「無法連接,因爲根CA被禁用。」
任何人都可以指向一個.NET或Win32調用的方向來確定證書的「證書目的」值嗎?或者閱讀證書的「證書狀態」?
我通過什麼在System.Security.Cryptography命名空間MSDN上市閱讀,並開始尋找到的CryptoAPI和CNG,但至今沒有發現任何東西。
謝謝!
傑出!感謝您的詳細解釋。由於我正在檢查根CA,而不是SSL證書本身,所以它沒有EKU擴展名(完全如您所說)。然而,將「Key Usage」(2.5.29.15)的oid添加到ApplicationPolicy中就像一個魅力。 –
我會說這是不可行的解決方案。事實上,並非所有瀏覽器都要求完整鏈對指定用途有效,並且僅在葉證書僅具有期望的用途時才檢查。如果你想通過屬性獲得根CA證書使用 - 請檢查它。因爲在中級CA級別禁止使用時可能會出現這種情況。結果,根CA可以,但代碼將失敗,而連接正常工作。 – Crypt32
@ crypt32 EKU必須是一個合適的子集。如果中間塊阻止EKU,葉子不能擁有它。他說他用於檢查的關鍵用法是無關緊要的,因爲它要求從EKU設置它的OID永遠不會打,但是當沒有EKU存在時將被允許。 – bartonjs