2013-12-19 31 views
2

我們試圖在使用System.Windows.Controls.WebBrowser的WPF應用程序中顯示需要X509證書的HTML內容。使用.NET WebBrowser控件顯示需要X509證書的HTML內容

這是一個簡單的XAML示例。

<WebBrowser Source="https://server.com/Welcome.html" /> 

在情況下存在與KeyUsages == X509KeyUsageFlags.DigitalSignature瀏覽器控件的兩個或更多X509證書提示用戶選擇應當使用的證書。我們想阻止顯示這個對話框。

通過代碼,我們可以知道應該使用哪個證書,但我們沒有看到將此信息發送給瀏覽器控件的方式。起初,我們期望WebBrowser擁有一個ClientCertificate或ClientCertificates屬性,就像HttpWebRequest一樣,我們可以用它來設置證書,但似乎沒有任何這樣的屬性。

我們意識到WebBrowser控件實際上是一個帶有WPF包裝的Win32控件,因此可能有一個較早的Win32 API調用可用於設置證書?

其他建議是使用不同網頁瀏覽器控件的第三方庫。在我們嘗試這種方法之前,我們想確保無法使用c#web瀏覽器控件。

+0

也許這裏有幫助http://stackoverflow.com/questions/4001547/c-sharp-wpf-webbrowser-alternative –

回答

0

WebBrowser控件調用主機的IHttpSecurity::OnSecurityProblem執行通知有關ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED錯誤,但你這裏有兩個障礙:

  1. WPF does not really expose any extension point讓你添加任何web瀏覽器主機接口的ActiveX主機。這can be circumvented by switching to the Windows Forms webbrowser control,或host the ActiveX directly and add your own IHttpSecurity implementation

  2. 要以WinInet方式選擇證書,您需要call InternetErrorDlg with the right HINTERNET handle。然而,webbrowser控件並沒有真正公開任何API來給你那個WinInet句柄。

我建議你找到或編寫一個可編程的代理在代理一邊做這個認證,然後使用UrlMkSetSessionOption使用代理你的進程。我不確定FiddlerCore是否符合法案,但您可以試試。