iOS应用无法再次访问安全服务器

时间:2017-01-29 10:41:14

标签: ios apache ssl http-status-code-404 ios10

我们有一个iOS应用程序,可以从我们的安全Web服务器读取信息。在我的朋友搬回美国之前,一切都很顺利。现在,他的手机仅在安装后第一次运行应用程序后或者从手机数据切换到wifi后第一次下载数据。该应用程序每次都适用于我和我在美国以外的地方(就像他在移居美国之前为他做的那样)。他的亲属报告了同样的问题。

我们两个人都有运行iOS 10.2的iPhone 6。我有开发代码,但他不是开发人员,也没有macbook,所以我无法直接调试他的手机。我已经从Test Flight下载了应用程序,以确保我拥有相同的二进制文件。

(仅供参考:我确实解决了在服务器上留下旧的自签名证书导致他出现SSL故障的问题。我在应用程序中没有非豁免的TLS /网络信息.plist条目加密=否。)

我们的服务器托管在美国,使用PHP运行Apache 2.4.18,并拥有商业证书。我经营过各种证书测试人员,他们都说证书完美无缺(甚至在我添加转发保密之前)。我已经将Apache日志发送到" trace6"看看SSL正在做什么,但他第二次尝试访问服务器(几乎)从不在站点access.log或error.log中记录任何内容。

有时他会在Apache网站上的错误.log中获取第二次尝试应用程序(我做了一点点编辑):

[Sun Jan 29 18:27:48.129214 2017] [ssl:info] [pid 6690] [client 70.211.19.XXX:8740] AH01964: Connection to child 8 established (server (redacted).net:443)
[Sun Jan 29 18:27:48.129312 2017] [ssl:trace2] [pid 6690] ssl_engine_rand.c(126): Seeding PRNG with 656 bytes of entropy
[Sun Jan 29 18:27:48.129354 2017] [ssl:trace3] [pid 6690] ssl_engine_kernel.c(1970): [client 70.211.19.XXX:8740] OpenSSL: Handshake: start
[Sun Jan 29 18:27:48.129365 2017] [ssl:trace3] [pid 6690] ssl_engine_kernel.c(1979): [client 70.211.19.XXX:8740] OpenSSL: Loop: before/accept initialization
[Sun Jan 29 18:27:48.129376 2017] [ssl:trace4] [pid 6690] ssl_engine_io.c(2065): [client 70.211.19.XXX:8740] OpenSSL: I/O error, 11 bytes expected to read on BIO#5566ac3b3e20 [mem: 5566ac3ef790]
[Sun Jan 29 18:27:48.129380 2017] [ssl:trace3] [pid 6690] ssl_engine_kernel.c(2008): [client 70.211.19.XXX:8740] OpenSSL: Exit: error in SSLv2/v3 read client hello A
[Sun Jan 29 18:27:48.129385 2017] [ssl:debug] [pid 6690] ssl_engine_io.c(1227): (70014)End of file found: [client 70.211.19.XXX:8740] AH02007: SSL handshake interrupted by system [Hint: Stop button pressed in browser?!]
[Sun Jan 29 18:27:48.129390 2017] [ssl:info] [pid 6690] [client 70.211.19.XXX:8740] AH01998: Connection closed to child 8 with abortive shutdown (server (redacted).net:443)

这里的一个问题是" OpenSSL:退出:SSLv2 / v3中的错误读取客户端问候A"。当然,TLS 1.2在服务器上,并且SSLv3被禁用 - 我相信它应该是。

作为测试我创建了一个测试应用程序来测试DNS,HTTP和HTTPS,他只在https页面上获得404错误。我可以随时随地访问手机中的任何页面 - 与他获得404的时间完全相同。然后我让他访问https:\\ www.google.com,它每次都适用于他。然后,他尝试我们的服务器和...即时404,并没有在服务器日志中。

我再说一遍 - 我从来没有遇到任何问题。相同的手机,相同的iOS,相同的二进制文件。

之前有没有人遇到这样的事情?

编辑:更新了方案并更正了一些不太正确的信息。

1 个答案:

答案 0 :(得分:0)

我发现了我的问题,这有点令人尴尬,但如果这有助于其他人,那么就在这里。 404试图告诉我一些事情。

在我的国家,所有ISP仍在运行IPv4。我的朋友搬到了美国,那里的一切都是IPv6。基本上,偶然我没有设置Apache将IPv6 / SSL配置指向与IPv4 / SSL相同的“HTML”目录 - 因此对他来说是404,而不是我。但是,端口80上的IPv6配置正确。我无法测试IPv6,因为我无法使用它。

我在服务器上使用wget后想出来了。我可以在index.html页面上获得点击,但没有别的。我找到了一个额外的“html”目录,因此指向了它的IPv6配置。日志中没有任何内容,因为它们是错误的日志(滚动眼睛,感觉像菜鸟)。

我曾尝试过一个IPv6代理页面,但事实证明它已经破了。即使我修复了我的网站并且应用程序在IPv6上工作,代理网站仍然会出现SSL错误。它可能正在使用我已经禁止的过时协议。相当红鲱鱼。