WebSocket网络错误:OSStatus错误-9807:证书链无效

时间:2016-06-18 14:26:25

标签: javascript ios websocket safari

我在safari中连接到websocket时遇到以下错误,在其余的浏览器中它工作正常

错误:

WebSocket network error: OSStatus Error -9807: Invalid certificate chain

代码:

var websocket = new WebSocket("wss://localhost:44300/websocketHome", "Room_123")

2 个答案:

答案 0 :(得分:1)

所以我要开始回答这个问题:我不是WebSockets,浏览器,Safari或URL的专家。我之所以提到这一点,是因为我不知道为什么这个解决方案有效,而且我不知道为什么Safari会以它的方式行事。

我花了几个小时来弄清楚为什么我的网站不在Safari中工作,但是在其他所有浏览器中工作。它让我生气,因为我没有时间处理这种垃圾。

基本上你需要做的就是替换它:

var websocket = new WebSocket("wss://localhost:44300/websocketHome", "Room_123")

用这个:

var websocket = new WebSocket("ws://localhost:44300/websocketHome", "Room_123")

但是,不要自己踢,因为当它在Chrome和Firefox中运行时你并没有想到它。 Safari似乎是唯一一个强制执行URL协议部分的浏览器,即" ws"而不是" wss"用于本地主机连接。

基本上我没有时间去研究Safari是否正确遵循标准,但这并不重要,因为我将把这一点作为Safari的另一个例子。 (2017年的Internet Explorer)不必从群体中脱颖而出,为网络开发人员带来生活困难。

如果Apple要强制执行其他浏览器所不具备的标准,欢迎他们这样做,但他们至少需要打印有用的错误, WebSocket网络错误:OSStatus错误-9807 :无效的证书链不够好。

修改

这对大多数人来说都是显而易见的,但对于那些不是专业开发人员的人来说,请确保不要将此更改部署到生产环境中。您希望使用wss协议进行生产,如果您已正确设置证书,那么在Safari上应该可以正常工作。

答案 1 :(得分:0)

解决方法是在“设置”>“ Safari”>“高级”>“实验性功能”>“ NSURLSession Websocket”中启用NSURLSession Websocket。应该可以在iOS 13.4.1+上运行。

请注意,这可能不适用于生产环境。