You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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协议配置:

  1. 打开Socket Rocket源码中的SRWebSocket.m文件
  2. 找到_setupStream方法中配置SSL的代码段(通常在创建输入/输出流后)
  3. 将原有的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 19:45:10