【问题标题】:Webkitdotnet unable to load https siteWebkitdotnet 无法加载 https 站点
【发布时间】:2011-04-07 10:28:45
【问题描述】:

我在我的 C# 项目中使用这个 webkitdotnet。一切都很顺利,直到我不得不使用带有 https 的访问站点。

我已经搜索了他们的论坛并找到了 few posts 关于这个但没有一个可以解决我的问题,所以请对这个问题有所了解。谢谢!

编辑:也如他们的线程中所述(也没有答案)我在尝试访问我的服务器时收到“无法使用已知 CA 证书对对等证书进行身份验证”错误,但 https://www.google.com 工作正常。

他们还提到了与 ssl 配合良好的“apple”构建(至少他们是这么说的),但我在任何地方都找不到它......

【问题讨论】:

    标签: webkit.net


    【解决方案1】:

    这有点小技巧,但你可以让 webkitdotnet ingore peer ssl 错误。 WebKitDotNet 使用 WebKit,而 WebKit 又使用 curl,这导致了那里出现的美妙的 ssl 错误。 curl 公开了一个忽略 ssl 错误的选项,但 webkit 和 webkitdotnet 似乎都没有在其 api 中公开此功能。但是,如果您签出 webkit 源代码,如果环境变量 WEBKIT_IGNORE_SSL_ERRORS 的值设置为 true,webkit 会将 curl 选项 (CURLOPT_SSL_VERIFYPEER) 设置为 false。

    这一切归结为如果您在初始化 webkit 或 webkitdotnet 组件之前在代码中设置环境变量,webkit 将忽略错误证书并允许您导航到该站点(排序就像在 IE9 的“坏证书警告”页面上单击“继续”一样)。

    C++:

    setvar("WEBKIT_IGNORE_SSL_ERRORS", "1");
    

    C#:

    Environment.SetEnvironmentVariable("WEBKIT_IGNORE_SSL_ERRORS", "1");
    

    如果有人感兴趣,参考的 webkit 源代码目前位于文件 webkit\Source\WebCore\platform\network\curl\ResourceHandleManager.cpp 的第 65 和 681 行。

    【讨论】:

    • @therealmitchconnors:谢谢你的回复(我昨晚在论坛上看到了你的回复),但是我找不到你说的引用代码?你能给我链接吗?我的意思是,我下载了 0.5 版本的 src,但它不存在。也许在网上发布您的修复程序不是一个坏主意? (由于主要开发者放弃了该项目)
    • @Nikola:如果你已经下载了 0.5 版的 WebKitDotNet,并在 Visual Studio 中打开了 WebKit.NET.sln,你应该会看到三个项目——WebKitBrowser、WebKitBrowserTest 和 WebKitCore。在 WebKitBrowserTest 中,打开 MainForm.cs,并在第 48 行和第 49 行之间插入以下文本。Environment.SetEnvironmentVariable("WEBKIT_IGNORE_SSL_ERRORS", "1"); 这应该使这一行成为public MainForm() 下的第一条语句,在调用InitializeComponent() 之前。运行项目,您应该能够导航到该站点,即使证书不正确。
    • @therealmitchconnors:感谢您的回复。我按照你说的做了,但是当我运行项目并导航到 google.com 时,我收到了这个错误:“SSL peer certificate or SSH remote key was not OK”
    • @Nikola:这不是我以前见过的。奇怪的是,你运行相同的代码却得到不同的结果……你是从 github 拉取最新版本的 WebKit.NET 吗?
    • @Nikola:尝试拉下我的 WebKitDotNet 分支。我已将其修改为默认忽略 SSL 错误,并在 (/IgnoreSSL) 中包含一个命令行标志以启用此功能。我还修改了项目文件 WebKitBrowserTest 以默认使用该标志。试试here 并告诉我你的想法。我已经为此提交了一个拉取请求,因此希望它很快会合并到主分支中。
    【解决方案2】:

    经过长时间的谷歌搜索,我终于为我的域购买了 SSL 证书,现在一切都很好。另外,需要注意的是,Webkit 是最容易使用的,并且允许 DOM 访问和操作。

    【讨论】:

      【解决方案3】:

      我尝试了下面的代码并为我工作。

      webkitBrowser.Preferences.IgnoreSSLErrors = true;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-17
        • 1970-01-01
        • 2012-10-18
        • 1970-01-01
        相关资源
        最近更新 更多