【问题标题】:Xcode 9 iOS 11 BoringSSL SSL_ERROR_ZERO_RETURNXcode 9 iOS 11 BoringSSL SSL_ERROR_ZERO_RETURN
【发布时间】:2017-12-13 21:03:27
【问题描述】:

我有一个在 iOS 上运行的简单程序 HelloWorld。相同的代码已经运行了很长时间。最近,我注意到当程序在连接到 Macbook 上的 Xcode 9 的 ipad 上运行时,出现以下 BoringSSL 错误。当我在模拟器中运行程序时,我没有看到这个错误。 iOS是11.2。 Xcode 是 9.2。

我的代码没有提到 BoringSSL。但是,它确实使用 NSMutableURLRequest 对服务器进行 https 调用。调用工作正常,除了 BoringSSL 消息之外,一切似乎都工作正常。

有没有办法可以调试为什么会出现消息? HellowWorld[466:85961],这两个数字是什么意思?

消息是什么意思,如何避免?

2017-12-13 15:41:13.486047-0500 HellowWorld[466:85961] [BoringSSL] Function boringssl_session_errorlog: line 2871 [boringssl_session_read] SSL_ERROR_ZERO_RETURN(6): operation failed because the connection was cleanly shut down with a close_notify alert
2017-12-13 15:41:13.486363-0500 HellowWorld[466:85961] [BoringSSL] Function boringssl_session_errorlog: line 2871 [boringssl_session_read] SSL_ERROR_ZERO_RETURN(6): operation failed because the connection was cleanly shut down with a close_notify alert

【问题讨论】:

  • 我有同样的问题,还没有找到解决方案,我正在使用 Alamofire 进行网络请求并且显示相同的错误/警告
  • 也有同样的问题
  • 我也有同样的问题
  • 来自 openssl 文档 openssl.org/docs/manmaster/man3/SSL_get_error.html: "SSL_ERROR_ZERO_RETURN: TLS/SSL 连接已关闭。如果协议版本为 SSL 3.0 或更高版本,则仅当在协议,即连接是否已完全关闭。请注意,在这种情况下 SSL_ERROR_ZERO_RETURN 不一定表示底层传输已关闭。"
  • 请问您找到解决方案了吗?

标签: ios xcode boringssl


【解决方案1】:

有没有办法可以调试为什么会出现消息?

是的,我有点惊讶它还没有被提及。

CFNetwork 处理Foundation 网络类的核心——它还具有(经常被忽视的)通过CFNETWORK_DIAGNOSTICS 环境变量进行详细日志记录的能力。

以编程方式启用CFNetwork 诊断日志记录

setenv("CFNETWORK_DIAGNOSTICS", "3", 1);

它应该设置为从 0 到 3 的整数值,其中 0 表示关闭,数字越大,日志记录越多。在正常开发过程中,您可以通过 Xcode 的方案编辑器设置此环境变量。当应用从 Xcode 运行时,CFNetwork 日志条目将出现在调试控制台区域中(如果不可见,请选择 View > Debug Area > Show Debug Area)。

环境变量应放置在应用启动序列的开头。通常把它放在 main 的开头就足够了,但是如果你有使用 CFNetwork 的 C++ 静态初始化器,你就必须把它放在它们之前。

注意:在 Swift 中,此代码将进入 main.swift。默认情况下 Swift 应用程序 没有main.swift; “Swift 编程语言”解释了如何 添加一个。
*另请注意,在 Swift 中删除 setenv 末尾的分号。

设置上面的环境变量肯定有助于确定问题出在哪里,或者至少为您提供一个开始诊断有点模糊的错误消息的起点。

CFNetwork Diagnostic Logging

【讨论】:

  • 实际上尝试了 ´setenv("CFNETWORK_DIAGNOSTICS", "3", 1);´ 并且它使我的 iPhone 6+ 变砖了。所以警告一句:只能通过 Xcode 方案编辑器设置这个......并从一个温和的值开始,比如“1”。
【解决方案2】:

我设法通过将“应用程序传输安全设置”键添加到 info.plist 来解决此问题。确保“允许任意负载”设置为“是”。

【讨论】:

  • “允许任意负载”属性设置为“是”。但我仍然收到这些错误。由于某些混乱的原因,当我的应用程序尝试将数据上传到我们使用 HTTPS 地址的服务器时,它会失败,并且任何后续的导航或拉动刷新操作都会冻结应用程序。有什么想法吗?
  • 也许如果我在 plist 文件中将我的服务器地址 (my-server.com) 列入白名单,那么它会起作用.. ?
【解决方案3】:

对于那些上面的方法不起作用的人,这就是我的问题所在:

我正在使用 Alamofire 发送带有 JSON 请求正文GET 请求。我将其更改为 GET 请求,该请求包含参数作为 URL 中的查询参数(沿着 GET https://your-api.com/v1/request?param=value 的行)。然后它完美地工作了。

【讨论】:

    【解决方案4】:

    我在尝试使用 NSLog 发布一个很长的列表时收到了类似的消息,因为它会在调试控制台中发布很长时间的列表,然后它会列出列表的一部分,然后是一些 ... 以显示控制台中没有打印更多内容,我修复了这个(使用 OBJ-C)并将这个#define 添加到我的 VC.m

    #define NSLog(FORMAT, ...) printf("%s\n", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
    

    也许你可以使用类似于你的 swift 项目的东西。

    【讨论】:

      猜你喜欢
      • 2018-01-04
      • 1970-01-01
      • 2018-03-25
      • 2018-03-04
      • 2018-03-01
      • 2018-03-05
      • 2018-03-01
      • 2018-04-28
      • 1970-01-01
      相关资源
      最近更新 更多