簡體   English   中英

當發行者不是X509時,使用證書存儲使用Microsoft .NET框架進行客戶端身份驗證的受信任根

[英]Use certificate when issuer is not is X509Store trusted roots for client authentication using Microsoft .NET framework

在處理這個問題時,我發現問題與最初的說法略有不同,所以我正在改變標題和描述

我正在嘗試使用我的客戶端證書對WebService進行身份驗證。 我正在為此目的使用WebRequest 我需要使用自簽名證書,而無需在Windows X509受信任的根存儲中注冊它。

我知道是否提供客戶端證書的方法是檢查服務器上的請求對象

我試圖使用這個問題的代碼作為指導。 它不適用於.NET。 這是我的代碼:

            var certificate = new X509Certificate2(Properties.Resources.MyCert);
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(host);
            req.ClientCertificates.Add(certificate);
            WebResponse resp = req.GetResponse();
            var stream = resp.GetResponseStream();

我觀察到的是,即使req.ClientCertificates確實包含帶有有效私鑰的證書,該證書也永遠不會呈現給服務器。 我沒有得到WebClient的指示,即在握手期間沒有使用證書。

如果我將證書放入“受信任的根”,則代碼將起作用(即使證書不在“個人”中)。

我的問題是:

  1. 由於證書在被置於“受信任的根”時可用,我認為這可能是由於政策或類似的東西。 是否有可能強制.NET忽略策略設置並在TLS協商期間使用提供的客戶端證書?

  2. 如果上述強制措施不可能,是否有提前告訴我的電話,我即將使用的證書不可用,將被忽略? 或者,如果此類調用不可用,我是否可以使WebClient失敗,指示證書錯誤,而不是默默地跳過?

注意 :我知道按照Microsoft描述配置證書將起作用。 這不是我想要的。 我不想在受信任的根目錄中注冊可能不安全的證書,因為這可能存在安全隱患。 我想在客戶端使用cert而不在商店注冊,或者至少得到一個異常,表明不能使用證書。 我意識到,為什么證書不能用於會話可能有多種原因,但必須有一個例外,或者至少在客戶端有某種指示它不能使用指定的證書。 相反,客戶只是不提供一個。

實例化X509Certificate2時,是否設置了PrivateKey屬性? 如果為null,則表示您缺少私鑰,這意味着SSL / TLS客戶端將無法對您進行身份驗證。

確保從PFX文件(或類似文件)而不是CER加載證書。 這些也包含私鑰。 它們通常用於此目的的密碼保護。 請參見如何使用c#從pfx文件中檢索證書? 了解更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM