Xamarin WKWebView 接受自签名证书

2024-04-08

我在网上看到过各种例子说明如何接受它们,但我总是得到发生 SSL 错误,无法与服务器建立安全连接。

我要注意的是,该方法肯定被调用(在 iOS 8.4 模拟器和 iOS 11 实际设备上运行),因此未调用的方法不是这里的问题。

到目前为止我已经尝试过的(显然我只在开发中使用此代码,而不是在生产中使用,等等):

1:

public override void DidReceiveAuthenticationChallenge(WKWebView webView, NSUrlAuthenticationChallenge challenge, Action<NSUrlSessionAuthChallengeDisposition, NSUrlCredential> completionHandler) {
 completionHandler(NSUrlSessionAuthChallengeDisposition.UseCredential, new NSUrlCredential(serverTrust));
}

2:

public override void DidReceiveAuthenticationChallenge(WKWebView webView, NSUrlAuthenticationChallenge challenge, Action<NSUrlSessionAuthChallengeDisposition, NSUrlCredential> completionHandler) {
 completionHandler(NSUrlSessionAuthChallengeDisposition.UseCredential, NSUrlCredential.FromTrust(serverTrust));
}

3:

    public override void DidReceiveAuthenticationChallenge(WKWebView webView, NSUrlAuthenticationChallenge challenge, Action<NSUrlSessionAuthChallengeDisposition, NSUrlCredential> completionHandler) {
        SecTrust serverTrust = challenge.ProtectionSpace.ServerSecTrust;
        NSData exceptions = serverTrust.GetExceptions();
        serverTrust.SetExceptions(exceptions);
        exceptions.Dispose();
        completionHandler(NSUrlSessionAuthChallengeDisposition.UseCredential, NSUrlCredential.FromTrust(serverTrust));
    }

4:

    public override void DidReceiveAuthenticationChallenge(WKWebView webView, NSUrlAuthenticationChallenge challenge, Action<NSUrlSessionAuthChallengeDisposition, NSUrlCredential> completionHandler) {
        SecTrust serverTrust = challenge.ProtectionSpace.ServerSecTrust;    //TODO: Get the following working (currently we still receive SSL errors)
        NSData exceptions = serverTrust.GetExceptions();
        serverTrust.SetExceptions(exceptions);
        exceptions.Dispose();

        challenge.Sender.UseCredential(NSUrlCredential.FromTrust(serverTrust), challenge);
        completionHandler(NSUrlSessionAuthChallengeDisposition.UseCredential, NSUrlCredential.FromTrust(serverTrust));
    }

我究竟做错了什么?谢谢。


为了支持自签名证书,您have two要做的事情:

  1. Allow NSExceptionAllowsInsecureHTTPLoads on your self-signed domain
    • 即使您正在使用https,您的应用被标记为存在信任问题
  2. 绕过证书安全检查

2 安全说明:为任何生产应用程序获取 CA 颁发的证书,因为这会完全禁用您域上的证书验证,从而允许 MITM 攻击、您的应用程序的 DNS 重定向欺骗等...您可以通过在主文件中包含公共 cer 来固定证书捆绑并根据收到的证书进行检查,但这仅仅意味着需要在 MITM 或 DNS 欺骗攻击中生成假证书(以及各种漏洞利用工具包中已经存在的工具)

使用示例https://badssl.com site:

WKNavigationDelegate:

public class NavigationDelegate : WKNavigationDelegate
{
    const string host = "self-signed.badssl.com";
    public override void DidReceiveAuthenticationChallenge(WKWebView webView, NSUrlAuthenticationChallenge challenge, Action<NSUrlSessionAuthChallengeDisposition, NSUrlCredential> completionHandler)
    {
        switch (challenge.ProtectionSpace.Host)
        {
            case host:
                using (var cred = NSUrlCredential.FromTrust(challenge.ProtectionSpace.ServerSecTrust))
                {
                    completionHandler.Invoke(NSUrlSessionAuthChallengeDisposition.UseCredential, cred);
                }
                break;
            default:
                completionHandler.Invoke(NSUrlSessionAuthChallengeDisposition.PerformDefaultHandling, null);
                break;
        }
    }
}

注意:将此类的实例分配给NavigationDelegate or WeakNavigationDelegate您的 WKWebView 实例的。

Info.plist NSAppTransportSecurity:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>self-signed.badssl.com</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Xamarin WKWebView 接受自签名证书 的相关文章

  • WebView获取最大滚动宽度

    大家好 我正在创建 epub 阅读器并在 android webview 中加载这本书 并且还使 webview 水平移动参考this https stackoverflow com questions 36617345 use horiz
  • 设置背景时按钮变大 - 如何使其变小

    我想让我的按钮在设置背景之前缩小或恢复正常 我知道使用背景色调可以使用相同的背景颜色来解决此问题 但我的问题是我在背景上使用选择器 当选择器设置为按钮背景时 它变得更宽 当我将背景切换为背景色调时 颜色变得不同 例如对我来说是紫色 并且按下
  • 为选择器中的项目添加键值

    我正在使用 XAMARIN 选择器来选择一个国家 地区 这些国家 地区在选择器中进行了硬编码 有没有一种方法可以通过键值识别每个国家 地区名称 我使用 SAPUI5 以类似的方式完成了此操作
  • 在 Xcode 上创建配置文件

    我正在尝试在 iPhone 上调试应用程序 Xamarin Forms 我已经在我的 Windows PC 上安装了 Visual Studio 我正在其上编写应用程序 并在我的 Mac 上安装了 Visual Studio 和 Xcode
  • SysUtils:ApplicationStatus(WebView)中的ApplicationContext为空

    我可以在基于 WebView 的应用程序启动时看到一些奇怪的东西 它根本不影响应用程序 但我很好奇为什么会出现错误 没有任何崩溃 一切似乎都很好 但是错误 这是日志猫 Loading com google android webview v
  • 如何从命令行运行 Xamarin.UITest?

    我想在我的构建服务器上运行测试 使用 Xamarin UITest 进行 该服务器在 OS X 上运行 TeamCity 我已经在线搜索了如何执行此操作 但我只能找到如何将这些测试提交到 Xamarin Test Cloud 这不是我想要的
  • xamarin intellisense 无法在 Windows 10 上的 Visual Studio 2015 中工作

    我一直在尝试在 Windows 10 平台上将 Xamarin 与 Visual Studio 2015 一起使用 我无法对 XML 使用 Intellisense 这非常令人沮丧 有什么解决办法吗 您需要将 android 布局文件的 x
  • 从 Xamarin Forms 的输入控件中删除下划线

    我是 Xamarin Forms 的新手 正在开发登录表单并使用 Material Design IVisual 我创建了一个自定义 Entry 类并继承它MaterialEntryRenderer来定制它 我想要实现的目标是删除下划线En
  • NativeScript:禁用 iOS WebView 缩放控件的方法?

    我正在尝试找出一种方法来防止用户通过捏合手势和双击来放大和缩小 iOS WebView tns ios 3 4 1 本质上禁用所有缩放 就像苹果之前使用的 html 元标记一样让用户决定是否要使用 iOS 10 及更高版本进行缩放 我找到了
  • WebView2 在没有 WebView2 运行时的情况下工作

    我们尝试在没有 WebView2 运行时的情况下使用 WebView2 因为它的大小为 100 MB 并将其分发给客户端 它在 2 台 PC 上进行了测试 两者都有相同版本的 Edge 在 PC1 上 如果没有 WV2 运行时 WebVie
  • 无法在 Android 中调整 Web 视图的大小

    我正在尝试调整大小Web View在安卓中 第一次单击时 Web 视图会扩展为新大小 但第二次单击时 它不会恢复为我指定的旧大小 任何帮助表示赞赏 public class MainActivity extends Activity Rel
  • 编辑和导入故事板更改从 Xcode 到 Visual Studio

    我正在将代码从 Xamarin Studio Mac 移动到 Visual Studio 我可以从 Xamarin Studio 在 Xcode 中打开故事板文件 如果我在 Xcode 中进行更改 关闭它 然后在 Xamarin Studi
  • 无法解析符号“javafx.scene.web”

    使用Intellij 2021 3 2 JavaFX版本 11 0 2 1 我正在尝试将 JavaFX WebView 添加到我的应用程序中 我的导入语句无法编译 import javafx scene web 编译错误 java 找不到符
  • 三星特定的网络视图问题

    我有一个phonegap应用程序 可以在Chromium和原生的 纯粹的Android浏览器WebView中无缝运行 三星修改的 Android 浏览器中的某些内容破坏了我的应用程序 而且我一生都找不到描述三星浏览器差异的资源 该线程似乎相
  • 如何在 Xamarin 中使用 Log4Net

    我有一个使用 Xamarin MonoTouch 的应用程序 我想在其中使用日志记录框架 搜索时我遇到了 Log4Net http logging apache org log4net http logging apache org log
  • 此列表分配如何进行?

    我看过这个代码示例 它看起来像是将一个数组初始值设定项分配给一个列表 我以为它不会工作 但不知何故它编译了 不是数组初始值设定项吗 Children 的类型为 IList 如果大括号前没有 新列表 它如何工作 var nameLayout
  • 如何调试仅在发布模式下崩溃的 Android 应用程序

    在调试模式下一切正常 但在发布模式下崩溃 调试模式下有哪些所需权限在发布模式下未打开 EDIT 当我将 链接 设置为 无 时 我会通过第一个屏幕进入 登录 屏幕 但是 当我添加发布权限时Internet 第一次尝试读取远程实体框架核心表时它
  • 如何在 Xamarin.iOS 应用程序中创建导航?

    我习惯于与Xamarin Forms 我用 XAML 或 C 创建一个页面并导航到它 但现在这是我第一次尝试创建一个不适合的 iOS 应用程序Xamarin Forms 我在 Windows PC 上的 Visual Studio 中进行此
  • 将 UIRefreshControl 用于 UIWebView

    我在 iOS 6 中看到了 UIRefreshControl 我的问题是是否可以通过下拉来刷新 WebView 而不是像在邮件中那样让它弹出 我使用 rabih 的代码是 WebView UIRefreshControl refreshCo
  • Xamarin Forms WebView 打开外部链接

    我的应用程序中有一个网络视图 当单击外部链接 在普通浏览器中在新选项卡中打开 时 我无法返回我的网站 当打开一个新标签时 有可能像 Gmail 一样关闭该标签的菜单吗 目的是 每当单击链接时 用户都可以选择使用哪个选项来查看内容 例如单击链

随机推荐