Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Android WebView SSL "Предупреждение безопасности"

Автор вопроса: Joe D'AndreaОтветов: 2

Я создаю тестовую версию приложения для клиента. Часть этого приложения использует WebView, который обращается к сайту на основе SSL. В свою очередь, клиент предоставил тестовый домен, в котором имя сертификата не соответствует полному доменному имени. Увы, они не в состоянии предоставить соответствующий сертификат. :(

Я работаю над этой проблемой в сопутствующем специальном приложении iOS с одной строкой кода (опять же, не для производственного использования - только для целей тестирования). Я искал аналогичную информацию об ОС Android, но решений, которые я видел здесь и в других местах, достаточно, чтобы по сравнению с ними у меня закружилась голова!

Есть ли простой способ обойти это? Даже настройки, ориентированные на пользователя, где-то спрятаны?

Подсказки приветствуются!

androidwebviewssl-certificatetestingandroid-webview

Ответы

Ответ 1 · рейтинг 6 · Lee

Создайте WebViewClient и обработайте onReceivedSslError, который выглядит следующим образом:

public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error)

Внутри этого обратного вызова вы можете просто вызвать handler.proceed(), и страница продолжит загрузку. Если вы не обработаете этот обратный вызов и не вызовете метод proceed(), то по умолчанию страница не будет загружаться.

Ответ 2 · рейтинг 1 · Anant Shah

Обновленный ответ в соответствии с новым обновлением политики безопасности Google для обработчика ошибок SSL, см. этот раздел Разработчики Android Статья Справочного центра.

Для предотвращения отклонения приложения в Google Play за нарушение нашей политики в отношении злонамеренного поведения.

Чтобы правильно обрабатывать проверку SSL-сертификата, измените код так, чтобы он вызывал SslErrorHandler.proceed() всякий раз, когда сертификат, представленный сервером, соответствует вашим ожиданиям, и вызывал SslErrorHandler.cancel() в противном случае.

Например, я добавляю диалоговое окно с предупреждением, чтобы пользователь подтвердил, и кажется, что Google больше не показывает предупреждение.

@Override
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
 String message = "SSL Certificate error.";
    switch (error.getPrimaryError()) {
        case SslError.SSL_UNTRUSTED:
            message = "The certificate authority is not trusted.";
            break;
        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", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        handler.proceed();
    }
});
builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        handler.cancel();
    }
});
final AlertDialog dialog = builder.create();
dialog.show();

}

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы