Использование веб-представления Android для подключения к защищенному серверу с помощью сертификата клиента


Может ли WebView или, более конкретно, PhoneGaps CordovaWebView использовать клиентские сертификаты для аутентификации на сервере?

Я понимаю, что родной браузер может использовать клиентские сертификаты, но я пытаюсь заставить приложение PhoneGap Android разговаривать с сервером, который требует клиентского сертификата для работы и не может видеть, как это сделать. Я пробовал различные методы, которые я видел в google, но они не работают на Android версии 4.0 или выше. Любые предложения будут сильно оценены.

1 4

1 ответ:

Это невозможно. Код, необходимый для ответа на вызов сертификата клиента, недоступен в sdk. Если вы посмотрите на исходный код WebViewClient в Android sdk, вы увидите этот метод

/**
 * Notify the host application to handle a SSL client certificate
 * request (display the request to the user and ask whether to
 * proceed with a client certificate or not). The host application
 * has to call either handler.cancel() or handler.proceed() as the
 * connection is suspended and waiting for the response. The
 * default behavior is to cancel, returning no client certificate.
 *
 * @param view The WebView that is initiating the callback.
 * @param handler An ClientCertRequestHandler object that will
 *            handle the user's response.
 * @param host_and_port The host and port of the requesting server.
 *
 * @hide
 */
public void onReceivedClientCertRequest(WebView view,
        ClientCertRequestHandler handler, String host_and_port) {
    handler.cancel();
}

Видите ли вы, что @hide в разделе doc? Это означает: "не делай это доступным для широкой публики."Нам нужна возможность переопределить этот метод и использовать ClientCertRequestHandler, но мы не можем. не знаю, когда google откроет этот API, но это так не доступен в JellyBean.