0

我正在使用 c# 实现 GeckoFX 浏览器。我需要导航到安全的自签名证书。但是 GeckoFX 向我抛出了这个错误。

证书不受信任,因为颁发者证书不受信任。该证书仅对 FG200B3913601572 有效(错误代码:sec_error_untrusted_issuer)

我如何绕过检查?

4

4 回答 4

6

您可以尝试此代码,但它需要最新版本的 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;
};
于 2013-10-10T17:42:08.877 回答
2

在 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 个首选项完成了这项工作,最后我没有收到任何“不受信任的证书”错误。赫雷卡!

于 2019-08-26T21:47:56.623 回答
1
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 中尝试

于 2015-09-24T10:00:08.567 回答
0

上面的代码不适用于 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
于 2014-10-15T20:13:43.937 回答