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>

В создании моего приложения я просто делаю:

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 ответ

Решение

[Решено]

В 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!!!
                ...
            }
        ...
  });
Другие вопросы по тегам