Flutter webview 中还需要 SSL 证书吗?

发布时间:2021-03-01 10:53

我们目前有一个为在线订购实用程序创建的 Angular 网络应用程序。 但是我们想用它创建一个原生应用,我们想使用 Flutter。

起初我们只是想使用 webview 来显示现有的 Angular 应用程序。

问题是,我们想这样做是因为我们还想摆脱通过手机访问应用程序需要 SSL 证书的情况。

webview 还需要 SSL 证书吗?

我想这是因为它毕竟仍然像访问网页一样,但我想确定。

回答1

webview_flutter 包没有禁用 SSL 检查和忽略 SSL 错误的选项。这是一个官方的 Flutter 插件,他们不想提供与 https 建立不受信任的连接的能力。这是 github 上的相关 issue

但是,您可以为提供此类功能的 webview 使用非官方插件。例如。 flutter_webview_plugin

final flutterWebviewPlugin = new FlutterWebviewPlugin();

flutterWebviewPlugin.launch(
    'your-url.com',
    ignoreSSLErrors: true,
);
回答2

webview_flutter 插件没有任何选项可以忽略 SSL 错误。 相反,使用我的 flutter_inappwebview 插件,忽略 SSL 错误非常简单,就像您通常在 Android 上所做的那样,即使用 onReceivedServerTrustAuthRequest 事件并为指定的请求或为所有请求。

使用最新版本 5.0.5+3https://badssl.com/ 的简单示例(该站点用于针对不良 SSL 配置测试客户端,请参阅 https://github.com/chromium/badssl.com)是:

ServerTrustAuthResponse(action: ServerTrustAuthResponseAction.PROCEED);

其中 child: InAppWebView( initialUrlRequest: URLRequest( url: Uri.parse("https://self-signed.badssl.com/") ), onReceivedServerTrustAuthRequest: (controller, challenge) async { print(challenge); return ServerTrustAuthResponse(action: ServerTrustAuthResponseAction.PROCEED); }, ), 参数提供有关挑战的所有信息,例如主机、协议、领域等。

此外,在 Android 上,当您返回要执行的操作(challengePROCEED)时,此决定由 Android 本身保存,因此下次您访问相同的 URL 时, CANCEL 事件不会被触发。 在这种情况下,您可以使用 onReceivedServerTrustAuthRequest 方法清除 Android SSL 首选项。