许多小时的搜索都没有得出答案.我们正在寻找一种方法,.NET WebBrowser控件可以导航到具有SSL安全问题的页面(自签名证书或不匹配的主机名),而无需停止并显示错误页面:
我已经看过很多帖子了:
如何在Webbrowser控件中禁用"安全警报"窗口 - 不起作用,因为WebBrowser显然不使用ServicePointManager
抑制托管WebBrowser控件对话框 - 取决于知道窗口标题,这对非英语用户不起作用
C#WebBrowser控件 - 忽略网站安全警告 - 这是一个重复关闭,答案只是参考上面的链接.
大多数表单帖子建议实现我已经完成的IInternetSecurityManager,但无济于事.
对所有URL(指定URLZONE_LOCAL_MACHINE或URLZONE_TRUSTED)的GetSecurityId的常量值进行响应不起作用.
以下内容没有帮助:
public unsafe int MapUrlToZone(string url, int* pdwZone, int dwFlags)
{
*pdwZone = 3; // URLZONE_TRUSTED;
return Win32.S_OK;
}
Run Code Online (Sandbox Code Playgroud)
最后,我似乎无法找到ProcessUrlAction产生任何效果的方法:
public unsafe int ProcessUrlAction(string url, int dwAction, byte* pPolicy, int cbPolicy,
byte* pContext, int cbContext, int dwFlags, int dwReserved)
{
*((int*)pPolicy) = (int)Win32.UrlPolicy.URLPOLICY_ALLOW;
return Win32.S_OK;
}
Run Code Online (Sandbox Code Playgroud)
有没有人成功找到通过SSL警告页面的方法?
我正在使用WebBrowser控件以编程方式访问单个网站,但每当我登录时,我都会收到此证书安全警报:
由于我信任该网站,并且因为我需要以编程方式自动化登录,所以此对话框会受到阻碍.
我搜索SO的解决方案,并发现了类似地雷问题,但在接受的答案不工作!
我在包含WebControl的表单中定义了一个静态成员:
public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true;
}
Run Code Online (Sandbox Code Playgroud)
在我的表单构造函数中,我添加了:
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);
Run Code Online (Sandbox Code Playgroud)
但这并没有摆脱证书安全警报.
我也点击了View Certificate
按钮,然后点击了Install Certificate
随后的对话框中的按钮,但这似乎也没有帮助.
有没有办法摆脱这个警告?
是否有IE相当于Firefox的一个添加安全例外?
注意:所有者的证书与独立浏览器(IE,FF,Chrome,Safari)完全正常(没有显示此安全警报).它只显示WebBroswer控件的问题.
我遇到与此处相同的问题:如何在Webbrowser控件中禁用"安全警报"窗口
我喜欢这个答案,但是我要去哪里ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);
?
在我使用以下代码提交学校网络的登录页面后,我收到"无效认证"消息:
HtmlElementCollection ellements = webBrowser.Document.GetElementsByTagName("input");
foreach (HtmlElement ellement in ellements)
{
if (ellement.OuterHtml == "<INPUT onclick=\"this.value = 'Submitted'\" value=\" Login \" type=submit>")
{
ellement.InvokeMember("click");
this.DialogResult = DialogResult.OK;
break;
}
}
Run Code Online (Sandbox Code Playgroud)