Веб-браузер Android получает sslError SSL_UNTRUSTED, но сертификат действителен - PullRequest
0 голосов
/ 26 мая 2018

Я реализовал onReceivedSslError метод в моем WebViewClient для правильной обработки недействительного сертификата https в веб-просмотре:

@Override
        public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
            final AlertDialog.Builder builder = new AlertDialog.Builder(WebActivity.this);
            String message = "SSL Certificate error.";
            switch (error.getPrimaryError()) {
                case SslError.SSL_UNTRUSTED:
                    message = "The certificate authority is not trusted.";
                    return;
                case SslError.SSL_EXPIRED:
                    message = "The certificate has expired.";
                    break;
                case SslError.SSL_IDMISMATCH:
                    message = "The certificate Hostname mismatch.";
                    break;
                case SslError.SSL_NOTYETVALID:
                    message = "The certificate is not yet valid.";
                    break;
            }
            message += " Do you want to continue anyway?";

            builder.setTitle("SSL Certificate Error");
            builder.setMessage(message);
            builder.setPositiveButton("continue", (dialog, which) -> handler.proceed());
            builder.setNegativeButton("cancel", (dialog, which) -> handler.cancel());
            final AlertDialog dialog = builder.create();
            dialog.show();
        }

Когда веб-просмотр загружает мою веб-страницу, обнаруживается ошибка SslError.SSL_UNTRUSTED.Однако если я открою один и тот же точный URL-адрес в Chrome (как для настольного компьютера, так и для мобильного), сертификат будет считаться действительным и доверенным:

Google Chrome certificate popup

Почему это происходит?

Ответы [ 2 ]

0 голосов
/ 04 июня 2019

Даже для меня он давал SSL_UNTRUSTED, когда сертификат выдавал недействительный CN (SSL_IDMISMATCH) на Android Chrome.Добавил network-security-config и все вроде нормально работало.Для меня я установил user-ca, который не был выбран webview.

Добавлен этот фрагмент кода, который позволил мне использовать user-ca, установленный в учетных данных пользователя.

<network-security-config>  
  <base-config>  
        <trust-anchors>  
            <!-- Trust preinstalled CAs -->  
            <certificates src="system" />  
            <!-- Additionally trust user added CAs -->  
            <certificates src="user" />  
       </trust-anchors>  
  </base-config>  

0 голосов
/ 26 января 2019

Для меня это была проблема с сервером, к которому я пытался добраться.У него была сломана промежуточная цепочка сертификатов.Это был сервер перенаправления с разорванной цепью.При наличии разорванной цепочки веб-просмотр не может быть разрешен, поскольку он не знает, где искать правильный сертификат.

Используйте этот инструмент для проверки распространенных ошибок конфигурации.Обязательно проверьте также все перенаправления.

Android не поддерживает Доступ к информации о полномочиях

И, следовательно, AIA Fetching

нет

Но?! .. он работает в браузерах Да, он работает в браузерах, потому что браузеры имеют список промежуточных звеньев, к которым можно обращаться, когда в сертификате разорвана цепочка.

Решение: Исправление цепочки сертификатов на сервере.

...