Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android HttpsURLConnection服务器\u名称在3g上损坏(?)_Android_Ssl_3g_Sni - Fatal编程技术网

Android HttpsURLConnection服务器\u名称在3g上损坏(?)

Android HttpsURLConnection服务器\u名称在3g上损坏(?),android,ssl,3g,sni,Android,Ssl,3g,Sni,根据谷歌的建议,我正在使用HttpsURLConnection进行api级别15的项目 我的测试用例非常简单: URL url = new URL(STATS); HttpsURLConnection we = (HttpsURLConnection)url.openConnection(); InputStream in = new BufferedInputStream(we.getInputStream()); 当我通过WiFi连接到服务器时,一切正常 当我通过3g连接到服务器时,我的A

根据谷歌的建议,我正在使用HttpsURLConnection进行api级别15的项目

我的测试用例非常简单:

URL url = new URL(STATS);
HttpsURLConnection we = (HttpsURLConnection)url.openConnection();
InputStream in = new BufferedInputStream(we.getInputStream());
当我通过WiFi连接到服务器时,一切正常

当我通过3g连接到服务器时,我的Apache日志中出现错误:

Hostname 202.139.83.152 provided via SNI and hostname myserver.com provided via HTTP are different
现在202.139.83.152地址是我的移动提供商APN的代理地址

我已经转储了两个请求的“Client Hello”数据包,握手协议/扩展:server\u name字段包含wifi请求的目标主机名(myserver.com),但包含3g请求的APN代理地址

这是:

  • 有些东西我编码不正确
  • 我在手机上的配置不正确(三星Galaxy S3)
  • 服务器上的某些配置不正确
  • 我的移动提供商正在做的坏事
  • Android库中的一个bug
我的服务器正在为此vhost使用专用ip地址

我可以使用DefaultHttpClient的一个简单子类通过3g成功地发出请求,但由于我的最小API级别是15,我希望走“首选”路径

任何建议都会受到极大的欢迎。我花了太多的时间试图让这个基本的东西工作


我的同事正在为这个项目负责iPhone开发,他摇了摇头,因为他的代码“只是开箱即用”。

事实证明这是一个很好的例子

我已经找到了一个解决方法,尽管我不确定它有多强大。到目前为止,对我有效的方法是在建立连接时禁用代理:

HttpsURLConnection http = (HttpsURLConnection) url.openConnection(Proxy.NO_PROXY);

我希望这对某人有所帮助。

事实证明,这是一个错误

我已经找到了一个解决方法,尽管我不确定它有多强大。到目前为止,对我有效的方法是在建立连接时禁用代理:

HttpsURLConnection http = (HttpsURLConnection) url.openConnection(Proxy.NO_PROXY);

我希望这对其他人有所帮助。

以下是我针对Apache的服务器端解决方案(去年在Apache2-Apache/2.2.14上工作)

通过删除strcmp(主机、服务器名)检查的“return HTTP\u BAD\u REQUEST;”更改ssl\u engine\u kernel.c后,重新编译Apache/mod\u ssl.so:


您仍然会收到错误日志消息,但不会收到错误400响应代码。

这是我针对Apache的服务器端解决方案(去年在Apache2-Apache/2.2.14上工作)

通过删除strcmp(主机、服务器名)检查的“return HTTP\u BAD\u REQUEST;”更改ssl\u engine\u kernel.c后,重新编译Apache/mod\u ssl.so:


您仍然会收到错误日志消息,但不会收到错误400响应代码。

您应该检查代理是否真的需要使用APN。查看您手机的APN配置。谢谢Robert。哇!我使用的是我第一次插入SIM卡时设置的“默认”APN(我猜)。所有其他3g网络接入都运行良好。我找到了一个没有代理设置的替代APN,我的代码现在可以工作了!!然而,这对我的应用程序的潜在用户意味着什么?如果承运人需要(?)代理,那怎么办?在我的代码中,有没有办法绕过或补偿代理?在欧洲,具有预配置代理的提供商很少。即使他们使用代理,代理通常也应该使用HTTPS传递,这不会改变任何内容。因此,我假设这种情况应该很少发生。您应该检查代理是否真的需要使用APN。查看您手机的APN配置。谢谢Robert。哇!我使用的是我第一次插入SIM卡时设置的“默认”APN(我猜)。所有其他3g网络接入都运行良好。我找到了一个没有代理设置的替代APN,我的代码现在可以工作了!!然而,这对我的应用程序的潜在用户意味着什么?如果承运人需要(?)代理,那怎么办?在我的代码中,有没有办法绕过或补偿代理?在欧洲,具有预配置代理的提供商很少。即使他们使用代理,代理通常也应该使用HTTPS传递,这不会改变任何内容。因此,我认为这种情况应该很少发生,我也有同样的问题。你,@Horrendo,发现这是一个稳定的解决办法吗?@BobbyJ,我只能用我目前的移动服务提供商来测试它,但至少用他们可以很好地工作。不太理想,但我等不及谷歌解决这个问题,等这个解决方案“普及”了。谢谢。我在瑞典的几家移动运营商和不同设置的WiFi网络中使用过它。我的连接没有问题。谢谢你的修复!奇怪的是,这个问题仍然存在。我也有同样的问题。你,@Horrendo,发现这是一个稳定的解决办法吗?@BobbyJ,我只能用我目前的移动服务提供商来测试它,但至少用他们可以很好地工作。不太理想,但我等不及谷歌解决这个问题,等这个解决方案“普及”了。谢谢。我在瑞典的几家移动运营商和不同设置的WiFi网络中使用过它。我的连接没有问题。谢谢你的修复!奇怪的是,这个问题仍然存在。