iOS 17下无法启用TLSv1.3,Socket Rocket连接WebSocket失败求助
解决Socket Rocket连接TLS 1.3 WebSocket失败的问题
错误分析
你遇到的NSOSStatusErrorDomain Code=-9836对应SSL_ERROR_UNSUPPORTED_PROTOCOL,说明客户端与服务器的TLS版本协商失败——服务器仅支持TLS 1.3,但当前Socket Rocket的SSL配置未启用该版本。
解决方法
1. 优先升级Socket Rocket到最新版本
旧版本的Socket Rocket可能未默认支持TLS 1.3,升级到最新版后,部分场景下会自动适配服务器的TLS版本要求。
2. 修改Socket Rocket源码强制启用TLS 1.3
如果升级后仍无法连接,需要修改Socket Rocket的SSL协议配置:
- 打开Socket Rocket源码中的
SRWebSocket.m文件 - 找到
_setupStream方法中配置SSL的代码段(通常在创建输入/输出流后) - 将原有的TLS版本设置替换为TLS 1.3:
// 替换原有的kCFStreamSSLLevel配置 CFStringRef tls13Protocol = CFSTR("TLSv1.3"); CFReadStreamSetProperty(_inputStream, kCFStreamPropertySSLLevel, tls13Protocol); CFWriteStreamSetProperty(_outputStream, kCFStreamPropertySSLLevel, tls13Protocol);
如果需要兼容TLS 1.2和1.3,可使用kCFStreamSSLLevelTLSv1_3OrLater(iOS 12+支持):
CFReadStreamSetProperty(_inputStream, kCFStreamPropertySSLLevel, kCFStreamSSLLevelTLSv1_3OrLater); CFWriteStreamSetProperty(_outputStream, kCFStreamPropertySSLLevel, kCFStreamSSLLevelTLSv1_3OrLater);
3. 验证服务器TLS 1.3配置
确保服务器端已正确配置TLS 1.3:
- 启用TLS 1.3协议
- 配置iOS 17.1支持的加密套件(如TLS_AES_256_GCM_SHA384等)
- 开启WebSocket所需的ALPN扩展(指定
http/1.1或h2)
代码调整示例
创建WebSocket请求时无需额外修改原有代码,只需确保上述Socket Rocket的配置修改完成:
NSMutableURLRequest *mutableRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"wss://your-tls13-server.com/ws"]]; SRWebSocket *newWebSocket = [[SRWebSocket alloc] initWithURLRequest:mutableRequest]; newWebSocket.delegate = self; [newWebSocket open];
内容的提问来源于stack exchange,提问作者mohamed mansoor
相关产品推荐
相关产品推荐

