Android WebView 和网络安全配置

标签 android android-webview android-network-security-config

我在 Android 8(26 API,Oreo)上开发,我在我的应用中使用 android.webkit.WebView

当我使用 WebView 加载页面时,我会实现“安全网络连接”(换句话说,我会避免中间人问题和自签名证书)

为此,我使用了网络安全配置(在 Android 版本 7.0 N,24 API 上)

所以:

res>xml>network_security_config.xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config>
        <domain includeSubdomains="true">MY_DOMAIN.com</domain>
        <pin-set>
            <pin digest="SHA-256">MY_PIN</pin>
        </pin-set>
    </domain-config>
</network-security-config>

我发现 MY_PIN 在此处插入 MY_DOMAIN.com:https://report-uri.com/home/pkp_hash

list >AndoridManifest.xml

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

在我的应用程序的 onCreate 中,我只需执行以下操作:

WebView webView = new WebView(this);
webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onReceivedSslError(..)..
    @Override
    public void onPageFinished()..
    ...});
webView.loadUrl(MY_DOMAIN.com);

根据 Android 文档,我做对了,但我遇到了一个问题:就像 network_security_config.xml 从未被检查过,因为我可以为 pin 设置每个“随机”和“错误”值并且它正常工作(URL MY_DOMAIN.com 正常加载,没有阻塞行为)。

这意味着如果某个中间人返回我在 res>xml>network_security_config.xml 中编写的那些不同的 pin,应用程序将继续运行良好并且没有安全行为。 它也不执行 WebViewClient 的覆盖错误方法之一。

请帮助我无法理解我的错误。

最佳答案

[已解决]

我在 AndoridManifest.xml 中声明了

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

编辑器警告了与 SDK 版本相关的问题,但我没有看到。 This is the warning .

[解决方案]

将此 tools:targetApi="n" 添加到 list 中,如下所示:

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

[编辑]

SSL 错误在 WebViewClientpublic void onReceivedSslError(...) 中处理(见以下代码)

  webView.setWebViewClient(new WebViewClient() {
            public void onReceivedSslError(WebView view, 
                final SslErrorHandler handler, SslError error) {
                     //HANDLE HERE THE ERROR!!!
                ...
            }
        ...
  });

关于Android WebView 和网络安全配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56001973/

相关文章:

java - 解析大型 JSON 数据时 Android 中的 JsonReader 异常

android - ICS 中脱节的 WebView 绘图

API 上的 Android 网络安全 <24

android - 如何收听 webview url 单击和启用/禁用操作栏上的按钮

android - 有没有办法在android应用程序中抵消frida工具包?

java - JNI 在 android/java 中解析 jstring 或 char* 而不使用 std

android - 进行数据连接时,在移动Chrome上检测HTML音频的Canplaythrough

java - Java 中的 findViewByID 相对布局 (Android)

android - 检测 WebView 中的选择更改