【问题标题】:WebSocket network error: OSStatus Error -9807: Invalid certificate chainWebSocket 网络错误:OSStatus 错误 -9807:证书链无效
【发布时间】:2016-06-18 14:26:24
【问题描述】:

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

错误:

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

代码:

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

【问题讨论】:

  • 您使用的是自签名证书吗?
  • 我遇到了类似的问题。只有 https + safari

标签: javascript ios websocket safari


【解决方案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 协议部分的浏览器,即用于 localhost 连接的“ws”而不是“wss”。

基本上我没有时间研究 Safari 是否正确遵循标准,但这没关系,因为我将把它作为 Safari 的另一个示例(2017 年的 Internet Explorer ) 不必要地从群体中脱颖而出,使 Web 开发人员的生活变得困难。

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

编辑

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

【讨论】:

    【解决方案2】:

    解决方法是在 Settings > Safari > Advanced > Experimental Features > NSURLSession Websocket 中启用 NSURLSession Websocket。应该可以在 iOS 13.4.1+ 上运行。

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

    【讨论】:

      【解决方案3】:

      我们遇到了这个错误,安全的 WebSockets 在 Safari 和 Chrome 下的较新版本的 OSX 中无法使用 LetsEncrypt 证书。我们的解决方法是用“fullchain.pem”替换对“cert.pem”的引用,如此链接中所述 https://community.letsencrypt.org/t/issues-on-mac-with-wss-osstatus-error-9807-invalid-certificate-chain/160930

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-06
        • 2021-05-20
        • 2023-01-25
        • 1970-01-01
        • 1970-01-01
        • 2020-10-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多