gpt4 book ai didi

c# - 使用 .NET WebBrowser 控件显示需要 X509 证书的 HTML 内容

转载 作者:太空宇宙 更新时间:2023-11-03 16:02:30 25 4
gpt4 key购买 nike

我们正在尝试在使用 System.Windows.Controls.WebBrowser 的 WPF 应用程序中显示需要 X509 证书的 HTML 内容。

这是 XAML 的一个简单示例。

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

在有两个或更多 X509 证书且 KeyUsages == X509KeyUsageFlags.DigitalSignature 的情况下,浏览器控件会提示用户选择应使用哪个证书。我们想阻止显示此对话框。

通过代码,我们可以知道应该使用哪个证书,但我们看不到将此信息发送到浏览器控件的方法。起初我们期望 WebBrowser 有一个 ClientCertificate 或 ClientCertificates 属性,就像 HttpWebRequest 一样,我们可以用它来设置证书,但似乎没有任何这样的属性。

我们意识到 WebBrowser 控件实际上是一个带有 WPF 包装器的 Win32 控件,所以也许有一个较旧的 Win32 API 调用可用于设置证书?

其他建议是使用具有不同网络浏览器控件的第 3 方库。在我们尝试这种方法之前,我们想确保无法使用 c# 网络浏览器控件。

最佳答案

网络浏览器控件调用主机的 IHttpSecurity::OnSecurityProblem实现以通知 ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED 错误,但是这里有两个障碍:

  1. WPF does not really expose any extension point让您将任何网络浏览器主机界面添加到 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符合要求,但您可以尝试一下。

关于c# - 使用 .NET WebBrowser 控件显示需要 X509 证书的 HTML 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20692984/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com