【问题标题】:Websocket SSL connectionWebsocket SSL 连接
【发布时间】:2015-09-03 08:03:18
【问题描述】:

我正在尝试测试一个安全的 websocket,但我遇到了问题。这是我的测试:

var WebSocket = require('ws');

describe('testing Web Socket', function() {
  it('should do stuff', function(done) {
    var ws = new WebSocket('wss://localhost:15449/', {
      protocolVersion: 8,
      origin: 'https://localhost:15449'
    });
    ws.on('open', function() {
      console.log('open!!!');
      done();
    });
    console.log(ws);
  });
});

这是“ws”创建后的日志:

{ domain: null,
  _events: { open: [Function] },
  _maxListeners: undefined,
  _socket: null,
  _ultron: null,
  _closeReceived: false,
  bytesReceived: 0,
  readyState: 0,
  supports: { binary: true },
  extensions: {},
  _isServer: false,
  url: 'wss://localhost:15449/',
  protocolVersion: 8 }

我没有收到打开的日志。我在本地运行该项目,当我使用 Chrome Advanced Rest Client 工具时,我可以正常连接。

我错过了什么吗?请帮忙。

编辑: 我添加了ws.on('error'),它退出了{ [Error: self signed certificate] code: 'DEPTH_ZERO_SELF_SIGNED_CERT' } 我也试过关注这个code,但得到了同样的错误。

【问题讨论】:

  • 你查看客户端的日志了吗?可能是由于证书无效,客户端拒绝与您的 SSL 服务器连接。查看客户的日志并更新问题。
  • ws 应该有一个错误事件。也许记录任何正在发生的事情?
  • 另外...我认为您定义了 onopen 事件处理程序之后 websocket 已经打开...
  • @AaronDufour 我编辑了问题,现在您可以看到我的错误是“自签名证书”
  • 您是否尝试过将WebSocket 传递给rejectUnauthorized: false 选项?听起来这可能会解决自签名证书错误。

标签: javascript node.js ssl websocket


【解决方案1】:

https 模块正在拒绝您的自签名证书(正如人们所希望的那样)。您可以通过传递rejectUnauthorized: false 选项来强制它停止检查(WebSocket 将传递给https):

var ws = new WebSocket('wss://localhost:15449/', {
  protocolVersion: 8,
  origin: 'https://localhost:15449',
  rejectUnauthorized: false
});

【讨论】:

  • 我尝试使用此解决方案解决我在使用 Cordova Android 应用程序时遇到的类似问题。但这给了我一个错误,因为“”Uncaught SyntaxError:无法构造'WebSocket':子协议'[object Object]'无效。”
猜你喜欢
  • 2016-07-16
  • 2013-06-03
  • 2016-08-22
  • 1970-01-01
  • 1970-01-01
  • 2015-08-26
  • 2014-09-12
  • 2015-06-08
相关资源
最近更新 更多