我正在构建一个需要使用 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 中运行,但我无法使用 HttpsURLConnection、SSLCONTEXT(TLS) 和 SSLENGINE 来实现。
任何机构都可以提供如何在 TLS 中设置服务器名称指示扩展的代码示例吗?