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!!!
...
}
...
});