2010-03-20 124 views
2

我正在嘗試使用下面的代碼將客戶端證書傳遞給服務器,但是我仍然恢復HTTP錯誤403.7-禁止:需要SSL客戶端證書。 HttpWebRequest不會發送客戶端證書的可能原因是什麼?在HttpWebRequest中發送客戶端證書

var clientCertificate = new X509Certificate2(@"C:\Development\TestClient.pfx", "bob"); 

        HttpWebRequest tRequest = (HttpWebRequest)WebRequest.Create("https://ofxtest.com/ofxr.dll"); 

        tRequest.ClientCertificates.Add(clientCertificate); 
        tRequest.PreAuthenticate = true; 
        tRequest.KeepAlive = true; 
        tRequest.Credentials = CredentialCache.DefaultCredentials; 
        tRequest.Method = "POST"; 
        var encoder = new ASCIIEncoding(); 
        var requestData = encoder.GetBytes("<OFX></OFX>"); 

        tRequest.GetRequestStream().Write(requestData, 0, requestData.Length); 
        tRequest.GetRequestStream().Close(); 

        ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CertPolicy.ValidateServerCertificate); 
        WriteResponse(tRequest.GetResponse()); 

回答

0

這可能是錯誤的證書,可能會錯過證書等。使用Fiddler(免費)作爲代理攔截流量,你會看到證書是否連接與否。

+0

我已經使用了fiddler,並且在初始連接請求中看不到客戶端證書。我有這個證書在mfc測試應用程序中工作,所以它似乎是.net不喜歡的東西。 – 2010-03-20 04:35:09

+0

您可以使用SoapUI進行示例請求,並將.pfx附加到它(請參閱首選項| SSL,並且您可以在其中附加.pfx)。通過Fiddler檢查請求,你會看到一個好的應該看起來像什麼。 – 2010-03-20 12:36:57

0

密碼是否正確?我不熟悉.NET的這種做法,但我認爲「bob」是密碼。更改爲「瑞克」,看看你是否得到一個錯誤。如果是這樣,那麼你可能做對了。如果所有內容與使用「bob」相同,則密碼可能有問題。

2

該問題似乎是某些系統沒有證書所依賴的中間證書頒發機構。這也很奇怪,因爲這個證書的pfx文件確實帶有兩個證書。

+0

特別是,我發現如果客戶端證書沒有被服務器的可信CA列表中的授權機構簽名,那麼服務器的行爲就好像客戶端證書未被髮送一樣。據推測,這是基於它無法知道證書是否提供任何有用的認證。 (但是如果你有用於驗證特定證書有效性的應用程序邏輯,那就很煩人了。) – 2013-02-14 10:37:56