Диалог предупреждения безопасности Android - PullRequest
0 голосов
/ 19 апреля 2011

При подключении HTTPS к сломанному серверу вы можете столкнуться с проблемами, поскольку поведение Android по умолчанию выбрасывает SSLException .

Итак, мне интересно,существует ли стандартное диалоговое окно с запросом безопасности, в котором пользователю предлагается выполнить действие с недействительным сертификатом, подобным тому, который имеет WebView (с опциями «Продолжить», «Просмотр сертификата» и «Отмена»)?

Например, BlackBerry автоматически показывает такой диалог и ожидает действия от имени пользователя, прежде чем выдавать ошибку.Могу ли я сделать то же самое в Android?

Ответы [ 2 ]

0 голосов
/ 13 сентября 2012

Стандартного диалога как такового не существует, и фактически HttpClient по умолчанию будет принимать только те сертификаты, которые являются частью хранилища доверенных сертификатов Android.

Вы можете сделать это, создав собственное довериеменеджер, который вы затем связываете с вашим экземпляром HttpClient.Это будет выглядеть примерно так:

public class PromptUserTrustManager implements X509TrustManager
{
    private AcceptUserSelectedCertsTrustManager(ValidateCertificateCallback callback) throws NoSuchAlgorithmException, KeyStoreException
    {
        KeyStore keyStore = null;
        TrustManagerFactory factory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        factory.init(keyStore);
        TrustManager [] trustmanagers = factory.getTrustManagers();
        m_standardTrustManager = (X509TrustManager) trustmanagers[0];
    }

    @Override
    public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException
    {
    }

    // This is where you check the server cert and make the determination
    @Override
    public void checkServerTrusted(X509Certificate[] certChain, String authType)throws CertificateException
    {
        try
        {
            m_standardTrustManager.checkServerTrusted(certChain,authType);
        }
        catch(CertificateException e)
        {
            // Cert isn't trusted - popup the error here. You'll need to 
            // make sure you switch to the UI thread since here you're on a network thread
            if(!userAcceptsCert(certChain))
            {
                throw e;
            }
        }
    }
}

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

То же самое можно сделать в WebView с помощью onReceivedSslError (), после чего вы можете отобразить эквивалентное предупреждение, позволяющее пользователю продолжить, если он этого пожелает.

0 голосов
/ 04 мая 2011

Полагаю, такого не существует - браузеры используют настраиваемые диалоговые окна и не предоставляют его сторонним приложениям.По крайней мере, я не смог найти упоминаний о желаемом поведении.Кстати, iOS ведет себя так же, как Android.

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