Использование веб-представления Android для подключения к защищенному серверу с помощью сертификата клиента
Может ли WebView или, более конкретно, PhoneGaps CordovaWebView использовать клиентские сертификаты для аутентификации на сервере?
Я понимаю, что родной браузер может использовать клиентские сертификаты, но я пытаюсь заставить приложение PhoneGap Android разговаривать с сервером, который требует клиентского сертификата для работы и не может видеть, как это сделать. Я пробовал различные методы, которые я видел в google, но они не работают на Android версии 4.0 или выше. Любые предложения будут сильно оценены.
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.