Android中的服务器名称指示扩展(RFC 3546)的TLS

den*_*nis 5 ssl https android sni

我正在构建一个需要使用https的Android应用.我没有问题与https地址进行https连接,该地址不使用带有服务器名称指示扩展名的 TLS .但我需要连接到使用带SNI扩展的TLS的https地址.

我为使用带有主机名扩展名的TLS的https地址所做的是:

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());
    } 
Run Code Online (Sandbox Code Playgroud)

如何在Android的TLS中添加服务器名称指示扩展.经过研究,我发现了一篇关于stackoverflow的帖子,但是我无法使用它来处理这些信息.

但它有点在路上"据我所知,Android SDK有部分支持.目前的情况如下:

由于Gingerbread发布TLS与HttpsURLConnection API的连接支持SNI.Android附带的Apache HTTP客户端库不支持SNI Android Web浏览器也不支持SNI(因为使用Apache HTTP客户端API)

"感谢您的帮助.我在android sdk中使用SSLCONTEXT(TLS)和SSLENGINE类尝试了sni.velox.ch链接.我正在握手."

Android SSL - SNI支持

这篇文章给出了答案,这将在Android中工作,但我不知道如何使用HttpsURLConnection,SSLCONTEXT(TLS)和SSLENGINE.

任何机构都可以提供如何在TLS中设置服务器名称指示扩展的代码示例吗?