Android WebView и настройка сетевой безопасности

Я разрабатываю 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

В manifest>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 никогда не проверяется, потому что я могу установить любое «случайное» и «неправильное» значение для вывода, и он работает нормально (URL MY_DOMAIN.com загружается нормально без блокировки поведение).

Таким образом, это означает, что если какой-то посредник вернет обратно один другой вывод из тех, которые я написал в res>xml>network_security_config.xml, приложение продолжит работать хорошо и без безопасного поведения. Он также не выполняет один из переопределенных методов ошибок WebViewClient.

Пожалуйста, помогите, я не могу понять свою ошибку.

3
0
2 283
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

[РЕШЕНО]

В AndoridManifest.xml я объявил

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

Редактор предупредил о проблеме, связанной с версией SDK, но я ее не увидел. Это предупреждение.

[РЕШЕНИЕ]

Добавьте этот tools:targetApi = "n" в манифест следующим образом:

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

[РЕДАКТИРОВАТЬ]

Ошибка SSL обрабатывается в public void onReceivedSslError(...) из WebViewClient (см. следующий код)

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

Спасибо, для меня это работает только на реальном устройстве, не работает на эмуляторах

fangxing 19.05.2021 05:01

Другие вопросы по теме