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

时间:2012-05-03 20:24:53

标签: android https ssl sni

我正在构建一个需要使用https的Android应用。我对使用Server Name Indication extension不使用TLS的https地址进行https连接没有问题。但我需要连接到使用带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());
    } 

如何在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 support

这篇文章给出了这个在Android中可行的答案,但是我无法通过HttpsURLConnection,SSLCONTEXT(TLS)和SSLENGINE来解决这个问题。

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

0 个答案:

没有答案