gpt4 book ai didi

ssl - 使用 NSURLConnection 时 Mac OS 10.9 以上的默认 SSLLevel

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

我们有一个遗留应用程序是针对 Mac 10.6 sdk 构建的。我们正在使用 NSURLMutableRequestNSURLConnection 进行网络调用。使用 Wireshark,我注意到在 10.9 - 10.11.2 上所有这些调用都是在 TLSv1 上进行的。在 10.11.6 之后(也是 10.13 测试版),这些都是在 TLSv1.2 上制作的。

我使用 CFURLRequestSetSSLProperties(dlsym) 更改了代码以强制使用 TLSv1.2。我将 kCFStreamSSLLevel 设置为“kCFStreamSocketSecurityLevelTLSv1_2”。在这些之后,我可以看到现在可以在 TLSv1.2 上进行调用。

来自 关于 kCFStreamSSLLevel 的 Apple 文档:

By default, a stream’s security level is kCFStreamSocketSecurityLevelNegotiatedSSL.

来自kCFStreamSocketSecurityLevelNegotiatedSSL:

Specifies that the highest level security protocol that can be negotiated be set as the security protocol for a socket stream.

我知道 10.9 支持 TLSv1.2。作为测试,我将 kCFStreamSSLLevel 设置为kCFStreamSocketSecurityLevelNegotiatedSSL 并且在 10.9 上它仍然调用 TLSv1

我有两个问题:

  1. 为什么 10.9-10.11.2 的调用是在 TLSv1 上进行的? 他们不应该自动选择可用的最高版本,即 TLSv1.2 .

  2. 使用 kCFStreamSocketSecurityLevelTLSv1_2 时,如果服务器不支持 TLSv1.2 是否会回退到较低版本或者调用会失败?我在检查时发现了这个:

kCFStreamSocketSecurityLevelNegotiatedSSL

Discussion: Stream property value, for both set and copy operations. Indicates to use TLS or SSL with fallback to lower versions. This is what HTTPS does, for instance.

kCFStreamSocketSecurityLevelTLSv1_2 甚至 kCFStreamSocketSecurityLevelTLSv1 都没有这样的声明。那么他们是否会回退到较低版本?

最佳答案

IIRC,版本特定常量设置一个特定版本,它不会协商任何其他版本。相比之下,协商允许它协商任何因安全问题而未被 Apple 列入黑名单的版本(例如 SSLv3)。

因此,我的记忆是,一般建议是始终在客户端使用协商,除非您需要使用特定版本来支持无法使用较新版本的 SSL/TLS 的主机或服务器不支持正确协商,然后始终将您的服务器设置为只接受最新版本(或稍旧,如果需要支持旧客户端)。

这种方法的优点是您的客户端代码不必随着 Apple 添加新版本和弃用旧版本而更改,并且服务器可能在您的直接控制之下,因此您可以随时更改它而无需强制您的用户下载软件更新。

关于ssl - 使用 NSURLConnection 时 Mac OS 10.9 以上的默认 SSLLevel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46235232/

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