Лучшее решение для ошибки SSL при сбое установления связи в веб-представлении android без игнорирования ошибок SSL - PullRequest
0 голосов
/ 14 июля 2020

Я создаю приложение, которое отображает определенный c сайт для пользователя, и я использую веб-представление для выполнения sh этой задачи. Когда я пытаюсь загрузить это определенное c веб-представление сайта, ничего не отображается, а журнал cat говорит:

E / chromium: [ERROR: ssl_client_socket_impl. cc (946)] рукопожатие не удалось; вернул -1, код ошибки SSL 1, net_error -202

Итак, после некоторого поиска я нашел этот ответ , чтобы игнорировать эту ошибку сертификата SSL и используя следующий код, который я могу загрузить этот сайт.

webView.setWebViewClient(new WebViewClient() {  
    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {              
        handler.proceed();
        Log.d("ssl_error", error.toString());                
    }
});

Когда я отправляю error.toString() в журнал cat, он говорит:

основная ошибка: 3 сертификат: выдан: [некоторые сведения о компании из указанного c сайта] Выпущено: CN = GeoTrust RSA CA 2018, OU = www.digicert.com, O = DigiCert In c, C = US; по URL: [этот адрес c сайт]

Но я хочу исправить эту ошибку, не игнорируя ее.

Как в ранее упомянутом переполнении стека ответ Я не могу сопоставить данные https://developer.android.com/training/articles/security-config, чтобы решить эту проблему, не игнорируя ее. Что мне делать с конфигурацией сети, чтобы решить эту проблему?

Примечание: - Я хочу работать только с одним конкретным сайтом c. Не нужно работать ни с каким сайтом

1 Ответ

1 голос
/ 14 июля 2020

«Основная ошибка: 3» относится к коду ошибки SSL_UNTRUSTED, определенному в классе SslError ( документация ).

Это означает, что ваш клиент подключился к серверу с цепочкой сертификатов SSL, что недопустимо. В частности, ваше устройство не принимает ЦС цепочки root как доверенный. Это может быть:

  • самоподписанный сертификат
  • цепочка сертификатов с сертификатом root, который не указан как доверенный root сертификат в вашем хранилище ключей:
    • root могло быть сброшено; например, за ненадежность!
    • root может быть новым, о котором ваше (устаревшее) устройство еще не знает,
  • сломанный цепочка сертификатов

Обратите внимание, что этот сценарий ios потенциально хуже / опаснее сертификата с истекшим сроком действия.

Я бы начал с использования https://www.ssllabs.com/ssltest/ для проверьте URL-адрес и посмотрите, что он говорит. В зависимости от того, что в нем написано, исправление правильное может быть одним из следующих:

  • Свяжитесь с владельцем сайта и попросите его обновить SSL-сертификат своего сайта.
  • Обновите свое устройство (на стороне клиента), чтобы получить текущий набор доверенных root сертификатов, одобренных вашим поставщиком.
  • Добавьте сертификат сервера (не root или промежуточные сертификаты CA) как доверенный сертификат в соответствии с инструкциями поставщика вашего устройства.

Обратите внимание, что последний фактически говорит «Я доверяю этому серверу» ... и вы должны делать это, только если вы можете получить сервер

Это (IMO) плохая идея, чтобы приложение Android делало это от имени пользователя. И плохая идея - доверять приложению, которое запрашивает разрешение на это. Если у вас нет действительно серьезных гарантий, что приложение заслуживает доверия

Почему? Потому что приложение, которое может устанавливать доверенные root сертификаты , могло установить плохой сертификат, открывая дверь для всякого рода мерзостей.

ОБНОВЛЕНИЕ

Результаты SSLTest показывают, что цепочка сертификатов не завершена, что объясняет, почему вы получаете ошибку SSL_UNTRUSTED

Вам следует сообщите об этом владельцу сайта:

  • Цепочка сертификатов неполная и должна быть исправлена.
  • На сайте установлено старое / устаревшее / устаревшее программное обеспечение SSL.
  • Сайт имеет ряд других уязвимостей безопасности.

Если они не реагируют, разумный курс действий - прекратить попытки использовать их сайт. К нему нельзя получить безопасный доступ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...