我们有一个iOS应用程序,可从安全的网络服务器读取信息。一切顺利,直到我的朋友搬回美国。现在,他的手机仅在应用安装后首次运行或在从手机数据切换到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站点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:退出:SSLv2 / v3中的错误读取客户端问候A”这一行。 TLS 1.2在服务器上,当然,并且SSLv3已禁用-正如我认为的那样。

作为测试,我创建了一个测试应用程序以测试DNS,HTTP和HTTPS,并且他仅在https页面上收到404错误。我可以随时从自己的手机访问任何页面-恰在他获得404的同时。然后,我让他访问https:\\ www.google.com,它每次都对他有效。然后,他尝试使用我们的服务器,并且...即时404,服务器日志中没有任何内容。

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

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

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

最佳答案

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

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

我在服务器上使用wget之后就知道了。我可以在index.html页面上获得成功,但是没有其他。我发现了一个额外的“ html”目录,因此找到了指向它的IPv6配置。日志中没有任何内容,因为它们是错误的日志(滚动眼睛并感觉像菜鸟一样)。

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

关于ios - iOS应用无法再次访问安全服务器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41919987/

10-14 20:26
查看更多