问题描述
我试图在基于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解决了我的问题