当前位置: 首页 > 知识库问答 >
问题:

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

云联
2024-09-17

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

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

共有1个答案

楚瑞
2024-09-17

在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,以确保通信的安全性和应用的合规性。

 类似资料:
  • 尽管我保留了verify=false,但在Python中还是出现了ssl错误。你能告诉我如何避免吗?但是curl命令使用-k选项。 错误:

  • 问题内容: 我想捕获客户端JavaScript中的HTTP请求标头字段,主要是Referer和User-Agent。我该如何访问它们? Google Analytics(分析)设法通过将您嵌入到页面中的JavaScript来获取数据,因此绝对有可能。 问题答案: 如果要访问引荐来源网址和用户代理,客户端Javascript可以使用这些引荐来源网址和用户代理,但不能直接访问标头。 要检索引荐来源网址

  • 问题内容: 我开始按照Android所没有使用的教程进行操作,并得到以下信息: 我想这可以归结为几个问题: 我没有创建自己的信任库,但是在网上搜索教程和其他内容时,不确定如何创建信任库。有没有一种方法可以创建或修改信任库以在其中存储所需的证书?(如果有任何不同,我使用的是自签名证书) 如何使SSL握手顺利进行?现在,我得到的错误是: 老实说,我真的不明白这意味着什么。 我需要在Android设备上

  • 我希望在构建项目时忽略证书。我正在努力做类似的事情。 我收到下面的信息。有人能帮我在构建过程运行时忽略证书吗? 解压缩 /root/.gradle/wrapper/dists/gradle-3.5-bin/daoimhu7k5rlo48ntmxw2ok3e/gradle-3.5-bin.zip /root/.gradle/wrapper/dists/gradle-3.5-bin/daoimhu7k

  • 我正在尝试让客户端/服务器程序通过ssl交换http消息。首先,我创建了使用DefaultHttpRequest成功交换http请求的客户端和服务器程序。发送请求的代码如下所示: 客户端管道工厂包含以下内容: 服务器管道工厂包含以下内容: .... 到目前为止一切顺利。客户端发送请求,服务器接收并解码请求。使用正确的数据调用我的处理程序上的messageReceived方法。 为了启用 SSL,我

  • 我把它和命令连接起来了 keytool-import-alias gmail-keystore C:\development\java\jdk11\lib\security\cacerts-file m gmail.com 我的计算机超载了,但错误仍然存在