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

iOS app fails second access to secure server

我们有一个 iOS 应用程序可以从我们的安全网络服务器读取信息。在我朋友搬回美国之前,一切都很好。现在他的 phone 只会在应用程序 运行 安装后或从 phone 数据切换到 wifi 后第一次下载数据。该应用程序对我来说每次都能完美运行,而且我在美国境外(就像他移居美国之前对他所做的那样)。他的亲戚也反映了同样的问题。

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

(仅供参考:我确实解决了一个旧的自签名证书遗留在服务器上导致他出现 SSL 故障问题的问题。我没有 TLS/networking info.plist 条目非豁免加密以外的应用 = 否)

我们的服务器托管在美国,运行s Apache 2.4.18 PHP,并有商业证书。我有 运行 各种证书测试人员,他们都说证书工作完美(甚至在我添加 Forwarding Secrecy 之前)。我已经将 Apache 日志调到 "trace6" 以查看 SSL 在做什么,但他第二次尝试访问服务器(几乎)从未在站点 access.log 或 error.log 中记录任何内容。

偶尔他会在 Apache 站点 error.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: Exit: error in SSLv2/v3 read client hello A" 的行。 TLS 1.2 在服务器上,当然,SSLv3 被禁用——我认为它应该被禁用。

作为测试,我创建了一个测试应用程序来测试 DNS、HTTP 和 HTTPS,他只在 https 页面上收到 404 错误。我可以随心所欲地从我的 phone 访问任何页面——与此同时他收到 404。然后我让他访问 https:\\www.google.com 并且每次都对他有效。然后他尝试了我们的服务器并...即时 404,服务器日志中没有任何内容。

我再说一遍 - 我从来没有任何问题。相同 phone,相同 iOS,相同二进制。

有没有人遇到过这样的事情?

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

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

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

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

我曾尝试过 IPv6 代理页面,但事实证明它已损坏。即使在我修复了我的站点并且该应用程序可以在 IPv6 上运行后,代理站点仍然会出现 SSL 错误。它可能使用了我已经禁止的过时协议。相当红的鲱鱼。