首页 > 其他分享 >关于Flutter的webview无法访问私有SSL证书链接的问题

关于Flutter的webview无法访问私有SSL证书链接的问题

时间:2023-09-09 16:25:46浏览次数:47  
标签:插件 证书 无法访问 SSL WebView webview flutter

优先考虑用  Freessl

 

技术方案:

 

问题原因

项目部署服务器的Https为私有SSL证书,目前确认不会提供共有SSL证书,导致WebView访问网页空白问题
官方设计WebView插件时,为了考虑安全性在访问https链接时,必须要求SSL证书有效,不支持自定义SSL错误的处理

解决方式

有三种处理方式:

  1. 使用flutter_inappwebview插件代替,它能做很多事件,包括管理SSL错误和SSL客户端证书请求的事件
  2. 使用flutter_webview_plugin插件,最新版本支持SSL证书的错误处理
  3. 本地修改flutter插件原生代码,兼容ssl证书错误的处理,代码如下
目录:android/src/main/java/io/flutter/plugins/webviewflutter/FlutterWebViewClient.java

@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
  handler.proceed();
}

修改后的代码:

import android.net.http.SslError;
import android.webkit.SslErrorHandler;

private WebViewClient internalCreateWebViewClient() {
    return new WebViewClient() {
      @TargetApi(Build.VERSION_CODES.N)
      @Override
      public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        return FlutterWebViewClient.this.shouldOverrideUrlLoading(view, request);
      }

      @Override
      public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        handler.proceed();
        }

      @Override
      public void onPageFinished(WebView view, String url) {
        FlutterWebViewClient.this.onPageFinished(view, url);
      }
    };
  }

  

决策

考虑到前2个为非官方插件,且各自有300+issue未解决,最近半年没有update,存在较大使用风险。而阅读官方源码发现,Flutter插件通过调用原生webview代码来实现,因此我们只需要在Android的FlutterWebViewClient代码中新增SSL证书兼容的处理即可,只需调整插件的引入地址,不用调整任何代码。最终决定采用本地修改插件的方式来实现

实现

checkout官方源码,根据上述代码修复SSL兼容问题后,托管到github平台,修改原插件的引入地址改为:https://github.com/Fitem/webview_flutter.git,解决问题


  # webView使用本地插件,忽略ssl证书
  webview_flutter:
    git:
      url: https://github.com/Fitem/webview_flutter.git

  

总结

遇到问题多阅读源码、查询相关资料,解析问题本质。了解熟知市面上常用处理方式,针对多种方案进行分析,列出各方案优缺点,根据实际情况综合考虑决策,给出最优方案

参考文章

  1. SSL error prevents website login in flutter
  2. Is a SSL certificate still needed in a Flutter webview?
  3. https://www.jianshu.com/p/d3eceba20477


标签:插件,证书,无法访问,SSL,WebView,webview,flutter
From: https://www.cnblogs.com/pythonClub/p/17689634.html

相关文章

  • 在最新的flutter2解决webview无法访问http问题
    具体操作就是在flutter项目下创建/android/app/src/main/res/xml/network_security_config.xml文件,填上配置内容: <?xmlversion="1.0"encoding="utf-8"?><network-security-config><base-configcleartextTrafficPermitted="true">......
  • 【RabbitMQ】服务启动成功,无法访问localhost_15672(RabbitMQ Management)
    问题描述RabbitMQ服务已经启动成功,已经安装rabbitmq_management插件,无法访问RabbitMQManagement(http://localhost:15672/)。原因分析15672端口被MicrosoftEdge占用。解决方案打开cmd终端,输入指令:netstat-ano|findstr15672TCP127.0.0.1:8323127.0.0.1:15672......
  • 配置ssl
    下载nginx.orgcd到目录,startnginx:启动nginx-sstopnginx-squit//可以修改hosts文件,做域名指向SSL:下载opensslopensslgenrsa-des3-outmyodoo.key1024opensslreq-new-keymyodoo.key-outmyodoo.csr(根据上面的myodoo.key生成csr)去除密码:复制myodoo.ke......
  • idrac登陆dell服务器 提示ssl错误解决方法
    1、使用idrac登陆dell服务器,提示ssl登陆错误,SSLmisserror错误2、勾选SSL以及TLS全选(兼容全部加密证书类型)3、edge使用IE模式访问......
  • evil-winrm:An error of type OpenSSL::Digest::DigestError happened, message is Dig
    使用evil-winrm无法连接主机,出现以下错误Info:EstablishingconnectiontoremoteendpointError:AnerroroftypeOpenSSL::Digest::DigestErrorhappened,messageisDigestinitializationfailed:initializationerrorError:Exitingwithcode1 修改/etc/ssl/ope......
  • XP系统无法访问Mysql 8.0.32数据库的问题
    之前一个项目,客户那边突然反应软件的数据库都访问不了了。这之前他们升级过MYSQL数据库的版本,更新到了最新的版本。我们的应用,因为需要兼容XP系统,所以当时用的是.NETFramework4.0。MySQL的驱动库在6.9.12之后就不支持.NET4.0了。所以我们用的MySQL库是6.9.12的,这个版本的库......
  • docker 安装nginx,并配置域名ssl证书(超详细)
    1、直接安装最新的nginxdockerpullnginx2、由于后期需要方便配置与管理nginx,需要把nginx容器内的文件夹进行挂载到宿主机中,所以此处需要进行到自己心仪的盘中创建文件夹(本次说明在/home)mkdirnginx&&cd$_&&mkdir-p{ssl,config,logs}ssl放域名对应证书config放nginx配置文......
  • linux centos 安装 openssl和httpd错误。
    一、出现如下错误;ab.o:Infunction`ssl_print_cert_info':/srv/httpd-2.4.57/support/ab.c:666:undefinedreferenceto`X509_get_version'/srv/httpd-2.4.57/support/ab.c:668:undefinedreferenceto`X509_getm_notBefore'/srv/httpd-2.4.57/support/ab.c......
  • 执行python脚本报错:case by sslerror(sslcertVerificationerror(1,ssl:vertificate_ve
    【现象】  使用python编写了一个请求,报错ssl证书过期问题【解决办法】   requests.packages.urllib3.disable_warnings()  r=requests.post(service_url,data=payload,headers=self.headers,verify=False)参考链接:https://www.cnblogs.com/sea-stream/p/14......
  • lattice crosslink开发板mipi核心板csi测试dsi屏lif md6000 fpga
    1.概述    CrossLink开发板,是用Lattice的芯片CrossLink家族系列的,LIF-MD6000-6JM80I。该芯片用于桥接视频接口功能,自带2路MIPI硬核的功能,4LANE MIPI的功能,支持高速率1.5Gbps。   其他普通IO支持1.2Gbps速率,支持5路MIPI通道功能。 芯片包含LVDS,SLVS200,SubLV......