5

我正在构建一个需要使用 https 的 Android 应用程序。我对不使用带有服务器名称指示扩展的 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 发布以来,与 HttpsURLConnection API 的 TLS 连接支持 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 中设置服务器名称指示扩展的代码示例吗?

4

0 回答 0