iOS 13 NSURLSession websocket不使用TLS 1.3

问题描述

我试图在基于NSURLSession webSocketTaskWithRequest:的websocket连接上使用TLS 1.3。奇怪的是,它不要求服务器提供TLS 1.3。但是,当我对HTTPS请求使用几乎相同的代码时,它的请求使用TLS 1.3。知道如何针对Websocket正确使用TLS 1.3吗?

//HTTPS
NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
sessionConfig.TLSMaximumSupportedProtocol = kTLSProtocolMaxSupported;
NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfig 
                                                      delegate:self 
                                                 delegateQueue:[NSOperationQueue mainQueue]];

[request setURL:url];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data,NSURLResponse * _Nullable response) {

...
}];

//WebSocket 
NSURLSessionConfiguration *config = [NSURLSessionConfiguration ephemeralSessionConfiguration];
config.TLSMaximumSupportedProtocol = kTLSProtocolMaxSupported;
NSURLSession *session = [NSURLSession sessionWithConfiguration:config
                                                          delegate:self
                                                     delegateQueue:[NSOperationQueue mainQueue]];
self.task = [session webSocketTaskWithRequest:request];
[self listen];
[self.task resume];

解决方法

显然,Xcode 11.3.1将使用TLS 1.2而非TLS 1.3。我不确定为什么会发生这种情况..但是使用Xcode 11.5解决了我的问题

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...