gpt4 book ai didi

ios - iOS11 中使用的 TLS 和 kCFStreamErrorCodeKey=-9800

转载 作者:太空宇宙 更新时间:2023-11-03 14:36:12 24 4
gpt4 key购买 nike

我们有一个应用程序通过 SSL 连接到我们的 Web 服务器。大多数时候它工作正常,但有时应用程序(我们使用 URLSession 加载请求)发送到服务器的一些请求失败(在 URLSession:task:didCompleteWithError:) 并出现以下错误:

Error Domain=SyncCPConnectionErrorDomain Code=12 "(null)" UserInfo={ErrorMessageKey=Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made." UserInfo={_kCFStreamErrorCodeKey=-9800, NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?

我们开始调试问题(使用 tcp 转储)并看到以下内容:

有时,应用程序(我猜是在操作系统级别,因为我们对此无法控制)在 SSL 握手 TLS 1.0 中提供最低和最高 SSL 版本,并且握手成功完成。

在其他连接中,应用程序提供 TLS 1.0 作为最低版本,TLS 1.2 作为最高版本。然后,握手在 TLS 1.2 版本中成功结束。

我们看到有时在 TLS 1.0 中执行完整握手,而在 TLS 1.2 中执行恢复握手。

由于版本之间的校验和算法不同,客户端可能会感到困惑,或者至少不同意服务器对校验和定义的看法。然后客户端(应用程序)关闭带有“非法参数”致命警报的连接。我们假设此时我们在其中一个应用程序连接上收到 -9800 SSL 错误。

我们的服务器配置为首选 TLS 1.2,但它也支持旧的 TLS 版本(如 1.0)。

首先,我们在应用程序中配置了 App Transport Security (ATS):NSAllowsArbitraryLoads = true

我们删除了它并认为它会强制应用程序始终使用 TLS 1.2,但它没有帮助。我们知道 Apple 声明在 iOS11 中,应用程序只能使用 TLS 1.2,但我们看到这里并非如此有什么想法会导致这种现象吗?或者我们如何解决这个问题?

谢谢。

最佳答案

您目前如何为此应用配置 ATS 设置?具体来说,您为 NSExceptionMinimumTLSVersionNSExceptionRequiresForwardSecrecy 使用什么值?将 NSExceptionMinimumTLSVersion 设置为 TLSv1.2 将强制 iOS 客户端仅使用 TLS 1.2 连接,但不确定这是否真的能解决您的问题。将 NSExceptionRequiresForwardSecrecy 设置为 NO 应该会打开更多 iOS 可接受的密码套件。

我相信 iOS 11 sdk TLS 实现中仍然存在错误,这些错误可能导致我们可能无法控制的间歇性 TLS 握手失败。您现在最好的选择是在遇到 SSL/TLS 连接错误时在完全失败之前至少重试一次或两次这些连接错误,并继续调查根本原因,因为它可能是安装在您的其中一台服务器或负载上的无效 SSL 证书平衡器。对于在 iOS 不支持的服务器端提供的 TLS 配置,也可能是无效/缺少密码套件。

关于ios - iOS11 中使用的 TLS 和 kCFStreamErrorCodeKey=-9800,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47669298/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com