Хранение SSL-сертификата Android при использовании WebViewClient - PullRequest
1 голос
/ 17 июня 2011

При подключении к защищенному серверу SSL, где хранится сертификат SSL на устройстве Android, когда мы используем класс Android WebViewClient?

Судя по моему тестированию, это отличается от хранилища сертификатов устройства, которое /system/etc/security/cacerts.bks

Этот вывод сделан из следующих шагов, которые я выполнил:

  1. Соединитесь, используя класс, который расширяет WebViewClient, перебирая метод ниже

    public void onReceivedSslError(WebView view, SslErrorHandler handler,SslError error) {
        // method to show an alert box. on User accept, call handler.proceed()
    }
    
  2. Поле предупреждения отображается только один раз при первом подключении к серверу.После этого, если мы подключимся снова, то это не показывается.Это говорит о том, что сертификат хранится внутри пользовательского агента.

  3. После (2), если мы используем Android URLConnection для подключения к серверу, настройку доверенного менеджера таким образом, что сертификат не является довереннымвыдаст исключение.

Код для (3):

a)

context.init(managers, new TrustManager[] {
    new MyX509TrustManager(null) }, new SecureRandom());
//using null for keystore, android will set trustStore to point to cacerts.bks file

b) Внутри MyX509TrustManager:

       public void checkServerTrusted(X509Certificate[] certificates, String authType) throws CertificateException {  
        if ((certificates != null) && (certificates.length == 1)) {

            try {
                standardTrustManager.checkServerTrusted(certificates, authType);
            } catch (CertificateException certException) {                  
                certException.printStackTrace();
            }
        }  
    }  

Обнаружено, что во время (3) мы получаем исключение:

java.security.cert.CertPathValidatorException: TrustAnchor for CertPath not found

Теперь, если пользовательский агент принял сертификат и сохранил его внутри, не должен ли он использоваться Android URLConnectionпри подключении к серверу.Если нет, то сертификат хранится не в хранилище сертификатов устройства, а локально в хранилище приложений (пользовательский агент).

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