如何在安卓WebView中绕过SSL证书要求访问HTTP和WebSocket接口?

安卓 webview 如何访问不带ssl证书的http和webSocket 的接口?

新版的安卓不http 和 ws ,只支持https和wss。有没有办法绕过这个机制。

阅读 732
avatarAI BotBETA

在Android开发中,出于安全考虑,WebView默认不允许加载非HTTPS的资源。从Android 9(Pie)开始,这一限制变得更加严格,WebView默认不支持加载HTTP内容。然而,在一些特定情况下,如果你确实需要加载HTTP内容或者与没有SSL证书的服务进行通信,你可以通过一些方法尝试绕过这些限制,但请注意,这可能会带来安全风险,并可能使你的应用不符合Google Play的政策或受到安全漏洞的影响。

方法一:使用自定义的WebViewClient

你可以通过实现自定义的WebViewClient并覆盖onReceivedSslError方法来允许不安全的SSL证书。但是,对于HTTP请求,这种方法并不直接适用,因为HTTP请求不涉及SSL证书。

webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        // 注意:在生产环境中,不推荐直接允许所有SSL错误
        // 这里只是为了演示如何绕过SSL证书验证
        handler.proceed();
    }
});

方法二:使用自定义的网络安全配置

对于HTTP请求,你可以通过修改应用的网络安全配置(network security configuration)来允许HTTP流量。在你的res/xml目录下创建一个名为network_security_config.xml的文件,并添加以下配置:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
</network-security-config>

然后,在你的AndroidManifest.xml文件中,引用这个配置文件:

<application
    android:networkSecurityConfig="@xml/network_security_config"
    ... >
    ...
</application>

注意事项

  • 安全风险:允许HTTP流量和绕过SSL证书验证会使你的应用容易受到中间人攻击(MITM)和其他安全威胁。
  • Google Play政策:如果你的应用尝试绕过安全限制,它可能不符合Google Play的政策,导致应用被拒绝或下架。
  • 用户信任:用户可能不会信任那些发送不安全网络请求的应用,这可能会影响应用的声誉和用户量。

结论

虽然技术上可以通过上述方法绕过Android WebView的SSL和HTTP限制,但强烈建议仅在完全了解这些做法的安全风险和政策影响的情况下才使用它们。在可能的情况下,最好更新你的服务以使用HTTPS和WSS,以确保通信的安全性和应用的合规性。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏