javascript - Stilts.js 无法使用安全的 true 连接到 websocket 服务器

标签 javascript security ssl stomp torquebox

当我将安全选项设置为 true 时,我在订阅我的 websocket 服务器时遇到问题。我运行了一个 SSL 验证器以确保它设置正确并且一切都通过了。同样为了安全起见,我还咨询了我的托管服务提供商,所以我认为这不是问题所在。而且,当 secure 设置为 false 时,一切正常。

WSS 在端口 8676 上运行,我确实确保该端口已打开。

我正在使用 Stomp Javascript 库。我从他们的 github 主分支 (https://github.com/projectodd/stilts/blob/master/stomp-client-js/src/main/javascript/stomp.js) 下载了最新版本。

我一直在 _transmit() 中收到此错误功能:can't call transmit on undefined

似乎没有设置 _transport _buildConnector() 内的属性(property)功能。我添加了一些 console.logs,它总是转到 else此函数中的语句。

关于修复的任何想法?或者我只是错过了什么?

这是我初始化连接的方式:

client = new Stomp.Client('my.ip.address', 8676, true);

这里是我记录一些函数的地方:

Stomp.Client = function(host, port, secure) { console.log('host param: ' + host); console.log('port param: ' + port); console.log('secure param: ' + secure); this._host = host || Stomp.DEFAULT_HOST; this._port = port || Stomp.DEFAULT_PORT || 8675; this._secure = secure || Stomp.DEFAULT_SECURE_FLAG || false; console.log('this._host: ' + this._host); console.log('this._port: ' + this._port); console.log('this._secure: ' + this._secure); }

输出:

host param: my.ip.address port param: 8676 secure param: true this._host: my.ip.address this._port: 8676 this._secure: true

_buildConnector: function(transports, i) { console.log('INSIDE _buildConnector()'); var callback = this._connectCallback; var client = this; if ( i < transports.length ) { console.log('IF!!!'); return function() { var fallback = client._buildConnector( transports, i+1, callback ); try { console.log('_buildConnector::IF::TRY'); transports[i].connect( function() { client._transport = transports[i]; callback(); }, fallback ); } catch (err) { console.log('_buildConnector::IF::CATCH'); fallback(); } }; } else { console.log('_buildConnector::ELSE'); return client.connectionFailed.bind(this); } }

输出:

INSIDE _buildConnector() IF!!! INSIDE _buildConnector() IF!!! _buildConnector::IF::TRY INSIDE _buildConnector() _buildConnector::ELSE _buildConnector::IF::TRY

connectionFailed: function() { console.log('INSIDE connectionFailed()'); if (this._errorCallback) { console.log('connectionFailed::IF'); console.log('this._errorCallback'); console.log(this._errorCallback); console.log('arguments'); console.log(arguments); this._errorCallback.apply(this._errorCallback, arguments); } else { console.log('connectionFailed::ELSE'); console.log('unable to connect :('); Stomp.logger.log( "unable to connect" ); } }

输出: No output..

最佳答案

我发现了这个名为 wscat 的 node.js 工具,它可用于将消息发送到 websocket 服务器 ( http://einaros.github.io/ws/)。

使用外部地址输入命令时: wscat -c wss://my.ip.address:8676

我一直收到以下错误:error: Error: Hostname/IP doesn't match certificate's altnames

但是当我把它改成我的域名时: wscat -c wss://mydomain.com:8676

我收到此消息:已连接(按 CTRL+C 退出)

这让我想到:

我将 Javascript 中的主机值设置为 STOMP 所在服务器的外部 IP 地址。但是 SSL 证书是为域名配置的。这让我想到我应该使用 mydomain.com 而不是 my.ip.address 作为 new Stomp.Client 中的主机参数。但这会导致 Torquebox 日志文件中出现以下错误:

NoSuchHostException: 没有这样的主机:mydomain.com

那么在 torquebox.yml 文件中,主机属性也需要配置为 mydomain.com

所以结论是:当尝试连接到您的 websocket 服务器时,您需要使用注册到 SSL 证书的域名,而不是外部 ip 地址。哇!

归功于:@bobmcwhirter,他帮助我找到了这个解决方案:https://github.com/projectodd/stilts/issues/20

关于javascript - Stilts.js 无法使用安全的 true 连接到 websocket 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22227337/

相关文章:

javascript OOP 概念问题

security - 在 cakephp 中使用 'low' 安全性有什么含义?

ssl - "Craft"go_lang 中的 TLS Client Hello

css - 当我的页面引用在 HTTPS 中时,为什么 Facebook 会在 HTTP 中为我的应用程序的 css 插入预加载脚本?

ssl - 通过 SSL 与 Gemfire 的 JMX 连接

javascript - 切换 DIV 标记内的 Bootstrap 列属性

javascript - 将 CSS 加载到 Webpack 中有什么意义?

javascript - 是否可以使用 Dijit/Menu 在 Dijit 的特定位置插入菜单项

asp.net - HTML.Encode() - 它是什么/如何防止 ASP .NET 中的脚本安全问题?

linux - 检查linux是否运行在正常模式