Я создаю приложение для Android, которое должно работать с https. У меня нет проблем с подключением https к https-адресу, который не использует TLS с Именем сервера Расширение индикации. Но мне нужно подключиться к https-адресу, который использует TLS с расширением SNI.
Что я сделал для https-адреса, использующего TLS без расширения имени хоста, было:
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("https://exampleurl.com/api");
try {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("username", email));
nameValuePairs.add(new BasicNameValuePair("ssh_public_key", publickey));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
Log.d(TAG, response.toString());
return response.toString();
} catch (Exception e) {
Log.d(TAG, e.toString());
}
Как добавить расширение Server Name Indication в TLS в Android. После исследования я нашел один пост в stackoverflow, но не могу заставить его работать с этой информацией.
Но это немного в пути "Насколько мне известно, в Android SDK есть частичная поддержка. Текущая ситуация следующая:
Поскольку соединение TLS выпуска Gingerbread с HttpsURLConnection API поддерживает SNI. Клиентская библиотека Apache HTTP, поставляемая с Android, не поддерживает SNI. Веб-браузер Android также не поддерживает SNI (поскольку используется клиентский API Apache HTTP)».
«Спасибо за помощь. Я попробовал ссылку sni.velox.ch, используя классы SSLCONTEXT (TLS) и SSLENGINE, доступные в Android SDK. Я получаю рукопожатие».
Этот пост дает ответ, что это будет работать в Android, но я не могу понять, как это сделать с помощью HttpsURLConnection, SSLCONTEXT (TLS) и SSLENGINE.
Может ли кто-нибудь предоставить пример кода, как установить расширение индикации имени сервера в TLS?