簡體   English   中英

RestSharp 不發送證書,但 Postman 將

[英]RestSharp not sending certificate but Postman will

我只是看不出我做錯了什么。 我有一個我獲得的證書(不是自簽名的)。 我有一個 pfx 文件和一個密碼。 我在 Postman 和 API 調用中添加了證書。 我嘗試使用 RestSharp 添加相同的證書,但它失敗了 - 服務器返回 400 錯誤並顯示沒有提供 SSL 證書的消息。

 public void AttachCertificate(RestClient client)
        {
            try
            {
                
                X509Certificate2 cert = new X509Certificate2(@"C:\...\xxx.pfx", "-password-");
                if (client.Options.ClientCertificates == null) client.Options.ClientCertificates = new X509CertificateCollection();
                if (cert != null) client.Options.ClientCertificates.Add(cert);
            } catch(Exception ex)
            {
                var x = ex;
            }

       
        }

運行此代碼后,我可以在調試器中看到證書(在 RestClient.Options.ClientCertificates 中)。 這是在.Net Core 3.1

我通過查看 RestSharp RestClient 的源代碼弄清楚了。 在 RestClient 的構造函數中,它配置 HttpMessageHandler(HttpClientHandler 類)並添加來自 RestClient 選項的任何證書。 但是,如果您事后將證書添加到選項 object(正如我所做的那樣),它永遠不會繼續更新底層 HTTP 對象。

我確信同樣的問題會影響 HttpClientHandler object 上的 CookieContainer、AutomaticDecompression、Credentials、Proxy、FollowRedirects、PreAuthenticate、RemoteCertificateValidationCallback 選項; 以及 HttpClient 上的 MaxTimeout、UserAgent 和 Expect100Continue 選項。

恕我直言:在構建 RestClient 后設置任何這些選項應該級聯到底層對象,或者選項 object 應該是只讀的。 但這是 RestSharp 開發人員的決定......

我剛剛測試了我在創建 RestClient 之前更改為獲取 PFX 證書的代碼,並將其設置在 RestClient 選項 object 中並傳遞給 RestClient 構造函數 - 它工作正常。

暫無
暫無

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

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