禁用WebSocket证书验证

时间:2016-07-07 09:46:35

标签: javascript websocket

我需要禁用WebSocket的证书验证,因为我使用的是自签名证书。

我在此问题Websocket SSL connection中找到rejectUnauthorized参数,但不再有效。实际上,如果你转到Mozilla's documentation,则只有两个参数:URL和协议版本。

在另一个问题或网站(不记得确切),我发现如果我先去https://server_ip,我会得到无效证书的提示,询问我是否要继续。然后我可以使用wss://server_ip进行连接,它可以正常工作,但确实如此,但这对我的情况不起作用。

因此,我需要在创建WebSocket期间禁用证书验证。我怎么能这样做?

我用于测试的代码是https://www.websocket.org/echo.html的代码。我将websocket = new WebSocket(wsUri);替换为websocket = new WebSocket(wsUri, {rejectUnauthorized: false});(在测试期间,还添加了protocolVersion: 8参数,如链接问题所示)

编辑:我需要使用自签名证书。让我们的加密是不可能的,因为它需要一个子域,然后我需要管理数百到数千个。该应用程序分为三个部分,将部署到每个客户(数百个):

  • 管理控制台:使用子域和LE证书。
  • WebSocket Server 1:仅使用IP
  • 需要加密连接
  • WebSocket Server 2:仅使用IP
  • 进行加密连接

1 个答案:

答案 0 :(得分:0)

我可能会迟到,但由于我遇到了同样的问题并且没有真正的答案,所以我转而阅读实施 documentation

方法

connect(requestUrl, requestedProtocols, [[[origin], headers], requestOptions])

将与给定的 requestUrl 建立连接。 requestedProtocols 表示客户端支持的多个子协议的列表。远程服务器将选择它支持的最佳子协议,并在建立连接时将其发回。 origin 是一个可选字段,可用于用户代理场景,以标识包含导致请求连接的任何脚本内容的页面。 requestUrl 应该是标准的 websocket url。

headers 应该是 null 或一个对象,指定额外的任意 HTTP 请求标头与请求一起发送。这可用于传递访问令牌等内容,以便服务器可以在决定接受和打开完整的 WebSocket 连接之前验证身份验证/授权。

requestOptions 应为 null 或指定要传递给 http.request 或 https.request 的附加配置选项的对象。这可用于传递自定义代理以从 HTTP 或 HTTPS 代理服务器后面启用 WebSocketClient 使用。

如果要传递标头,必须指定

origin,如果要传递 requestOptions,则必须同时指定 origin 和标头。 origin 和 headers 参数可以作为 null 传递。

因此,如文档所述,除非您对这些参数中的任何一个进行了特定配置,否则您应该传递 null。这解决了迷宫。原来是这样:

var client = new WebSocket();
client.connect(WSSrvUrl, null, null, null, {rejectUnauthorized: false});
//or depending on the implementation you're using (this applies to Nodejs and web browser implementation:
var client = new WebSocket(WSSrvUrl, null, null, null, {rejectUnauthorized: false});

就是这样。

可持续发展目标

相关问题