SSL错误阻止网站登录混乱

时间:2019-01-16 17:16:46

标签: dart flutter

嗨,

作为Xamarin的替代品,我试图创建一个具有相同功能的应用程序。 但是,webview插件/软件包不适用于自签名的ssl证书。 在Xamarin中,有一种方法可以处理ssl错误,并且仍然 加载网站。

当前代码:

  @override
  void initState() {
    super.initState();
    final flutterWebviewPlugin = new FlutterWebviewPlugin();
    flutterWebviewPlugin.onHttpError.skip(1000);
    flutterWebviewPlugin.launch("https url to website", hidden: true,
        allowFileURLs: true,
        appCacheEnabled: true,
        withJavascript: true,
        withLocalStorage: true,
        withZoom: true);

flutterWebviewPlugin.onHttpError.skip(1000);
flutterWebviewPlugin.onStateChanged((state) async)
{
  flutterWebviewPlugin.evalJavascript(
      "document.getElementById(\"name\").innerText = \"username\"");
  flutterWebviewPlugin.evalJavascript(
      "document.getElementById(\"password\").innerText = \"pw\"");
  flutterWebviewPlugin.evalJavascript(
      "document.getElementById(\"loginbutton\").invokeMember(\"click\")");
  var test = flutterWebviewPlugin.evalJavascript(
      "document.getElementById(\"errorbox\").innerText");
};
flutterWebviewPlugin.dispose();
flutterWebviewPlugin.close();

错误:

Failed to validate the certificate chain, error: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.

有没有比用Java和Swift编写自己的程序包或自定义WebView更好的方法了?

2 个答案:

答案 0 :(得分:2)

在Android上,您可以修改插件。将副本克隆到本地计算机,然后向flutter_webview_plugin/android/src/main/java/com/flutter_webview_plugin/BrowserClient.java

添加其他替代

覆盖public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error) 只需执行handler.proceed()

的实现

假设您的项目在/projects/myproject中,并且您将插件克隆到/projects/flutter_webview_plugin中。在/projects/flutter_webview_plugin/android/src/.../BrowserClient.java中进行更改。然后,使用(用flutter_webview_plugin替换现有条目)更新项目的pubspec.yaml

dependencies:
  flutter_webview_plugin:
    path: ../flutter_webview_plugin

答案 1 :(得分:0)

今天 flutter_webview_plugin 有一个参数 ignoreSSLErrors。示例:

    return WebviewScaffold(
      url: url,
      ignoreSSLErrors: true,
      appBar: new AppBar(
        title: Text('Title'),
      ),
    );
相关问题