带 SSL 的 WebSocket

有没有可能使用带 HTTPS 的 WebSocket?

当切换到 HTTPS 时,我的 WebSocket 返回一个安全性错误,并且可以很好地与常规 HTTP 一起工作。

下面是一个片段;

socket = new WebSocket("ws://my_www:1235");
172358 次浏览

您不能在 HTTPS 上使用 WebSocket,但是您可以在 TLS 上使用 WebSocket (HTTPS 就是 HTTP over TLS)。只要在 URI 中使用“ wss://”即可。

我相信最新版本的 Firefox 不会允许您使用 HTTPS 页面中的非 TLS WebSocket,但反过来应该不成问题。

WebSocket 连接从 HTTP 或 HTTPS 握手开始。当通过 HTTP 访问页面时,可以使用 WS 或 WSS (WebSocket 安全: WS over TLS)。但是,当您的页面通过 HTTPS 加载时,您只能使用 WSS-浏览器不允许“降级”安全性。

另外一个警告(除了 Kanaka/peter 的回答) : 如果您使用 WSS,并且浏览器不接受服务器证书,那么您可能得不到 任何浏览器呈现的对话框(就像 Web 页面一样)。这是因为 WebSocket 被视为所谓的“子资源”,证书接受/安全异常/不为子资源呈现任何对话框。

为了支持@oberstet 的回答,如果浏览器不信任 cert (例如,您得到一个“此站点不安全,是否继续?”)一个解决方案是打开浏览器选项,导航到证书设置,并添加主机和发布的 Web 套接字服务器正在从证书提供者作为一个异常。

例如,在“证书提供商有限公司”中添加“ example-wss-domain.org : 6001”作为例外。

在 firefox 中,这可以通过“ about: 偏好”和搜索“证书”来完成