Android WebView и настройка безопасности сети - PullRequest
1 голос
/ 06 мая 2019

Я занимаюсь разработкой на 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.

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

1 Ответ

1 голос
/ 06 мая 2019

[решено]

В 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!!!
                ...
            }
        ...
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...