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

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

我们有一个 iOS 应用程序可以从我们的安全网络服务器读取信息。在我 friend 搬回美国之前,一切都很好。现在他的手机只有在应用程序安装后第一次运行或他从手机数据切换到 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 读取客户端 hello A 中的错误”这一行。 TLS 1.2 在服务器上,当然,SSLv3 被禁用——我认为它应该被禁用。

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

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

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

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

最佳答案

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

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

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

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

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

相关文章:

ios - 在本地和异地保存状态

ssl - 在 C# 中对 https ://with asp. 网上任何站点的安全页面进行屏幕抓取

ios - 替换 Autolayout NSConstraints 设置中的 View

iOS 8 用户之间的数据共享

ios - 在透明导航栏之间过渡到半透明

php - $_SERVER ['PHP_SELF' ] 和 $_SERVER ['SCRIPT_NAME' ] 有什么区别?

regex - htaccess 删除 .php、.html 和尾部斜杠

xml - ColdFusion 10 Developer、Tomcat 7.0.64 和多个网站

python - 无法使用 python HTTPSConnection() 连接到 Web 服务器

ssl - 如何为 java Play 强制执行 https! Heroku 上的应用程序?