TLS с расширением индикации имени сервера (RFC 3546) в Android
Я создаю приложение для 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());
}
Как добавить расширение индикации имени сервера в TLS в Android. После исследования я нашел один пост на stackru, но не могу заставить его работать с этой информацией.
Но немного в пути "Насколько я знаю, в Android SDK есть частичная поддержка. Текущая ситуация следующая:
Так как соединение TLS Gingerbread с API HttpsURLConnection поддерживает SNI. Клиентская библиотека Apache HTTP, поставляемая с Android, не поддерживает SNI. Веб-браузер Android также не поддерживает SNI (поскольку используется API-клиент Apache HTTP)".
"Спасибо за помощь. Я попробовал ссылку sni.velox.ch, используя классы SSLCONTEXT(TLS) и SSLENGINE, доступные в Android SDK. Я получаю рукопожатие".
Этот пост дает ответ, что это будет работать в Android, но я не могу понять, как это сделать с помощью HttpsURLConnection, SSLCONTEXT(TLS) и SSLENGINE.
Может ли какой-либо орган предоставить пример кода, как установить расширение индикации имени сервера в TLS?