Вопрос

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

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

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

Клюи оценены!

Это было полезно?

Решение

Создайте WebViewClient и обрабатывать onreceivedssLeRor, который выглядит так:

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

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

Другие советы

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

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

Чтобы правильно обрабатывать проверку сертификата SSL, измените свой код, чтобы вызвать SSLERRORHANDLER. Проверьте () всякий раз, когда сертификат, представленный сервером, соответствует вашим ожиданиям, и включает в себя 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();

}

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top