gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:41:05 24 4
gpt4 key购买 nike

当我将安全选项设置为 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com