我正在使用 c# 实现 GeckoFX 浏览器。我需要导航到安全的自签名证书。但是 GeckoFX 向我抛出了这个错误。
证书不受信任,因为颁发者证书不受信任。该证书仅对 FG200B3913601572 有效(错误代码:sec_error_untrusted_issuer)
我如何绕过检查?
我正在使用 c# 实现 GeckoFX 浏览器。我需要导航到安全的自签名证书。但是 GeckoFX 向我抛出了这个错误。
证书不受信任,因为颁发者证书不受信任。该证书仅对 FG200B3913601572 有效(错误代码:sec_error_untrusted_issuer)
我如何绕过检查?
您可以尝试此代码,但它需要最新版本的 Geckofx(从源代码构建):
browser.NSSError += (s,e) => {
CertOverrideService.RememberRecentBadCert(e.Uri);
Uri refUrl = browser.Url;
browser.Navigate(e.Uri.AbsoluteUri, refUrl != null ? refUrl.AbsoluteUri : null);
e.Handled = true;
};
在 GeckoFx 60中, RememberRecentBadCert现在已弃用,因此您必须使用RememberValidityOverride
browser.NSSError += (s, e) =>
{
if (e.Message.Contains("Certificate"))//Peer's Certificate issuer is not recognized.
{
CertOverrideService.GetService().RememberValidityOverride(e.Uri, e.Certificate, CertOverride.Mismatch | CertOverride.Time | CertOverride.Untrusted, false);
if (!e.Uri.AbsoluteUri.Contains(".js") && !e.Uri.AbsoluteUri.Contains(".css")) browser.Navigate(e.Uri.AbsoluteUri);
e.Handled = true;//otherwise shows error
}
};
参考:https ://bitbucket.org/geckofx/geckofx-60.0/src/default/Geckofx-Core/Services/CertOverrideService.cs
通过处理证书错误,我的浏览器开始几乎正常工作,但这些证书错误仍然导致意外错误。这就是为什么我将要使用的证书添加到 Windows 根证书。但它仍然没有工作。最后我发现 GeckoFX 默认不导入存储的 Windows 证书,它必须通过以下首选项启用:
GeckoPreferences.User["security.enterprise_roots.enabled"] = true;
GeckoPreferences.User["security.enterprise_roots.auto-enabled"] = true;
这 2 个首选项完成了这项工作,最后我没有收到任何“不受信任的证书”错误。赫雷卡!
geckoWebBrowser1.NSSError += geckoWebBrowser1_NSSError;
void geckoWebBrowser1_NSSError(object sender, Gecko.Events.GeckoNSSErrorEventArgs e)
{
if (e.Message.Contains("Certificate"))
{
Gecko.CertOverrideService.GetService().RememberRecentBadCert(e.Uri, e.SSLStatus);
geckoWebBrowser1.Navigate(e.Uri.AbsoluteUri);
e.Handled = true;
}
}
在壁虎 33 中尝试
上面的代码不适用于 29.0.2 版本。有一个错误导致 CertOverrideService.RememberRecentBadCert 调用出错。
升级到 29.0.11 后,它运行良好。
这是 VB.NET 代码。
Sub IgnoreSSLError(ByVal sender As Object, ByVal e As Gecko.Events.GeckoNSSErrorEventArgs) Handles WebBrowserRehab.NSSError
CertOverrideService.RememberRecentBadCert(e.Uri)
WebBrowserRehab.Navigate(e.Uri.AbsoluteUri)
e.Handled = True
End Sub