我需要允许客户端连接到服务器 10.0.4.160 上的 websocket。10.0.4.160 服务器上没有安装 SSL,但它有一个在端口 8080 上运行的 websocket。
我需要设置一个安全隧道以允许客户端连接到 websocket。
我在我的 Windows Server 2008 R2 上安装了 stunnel,并将我的 stunnel.conf 文件更改为看起来像这样
[websockets]
accept = 8443
connect = 8080
verify = 2
CAfile = ca-certs.pem
client = yes
我希望连接到端口 8433 上的服务器,并且 stunnel 将允许连接连接到端口 8080
这是我在客户端控制台中使用的代码“当然,控制台在我内部网络上的 PC 上”
var conn = new WebSocket('wss://10.0.4.160:8443');
conn.onopen = function(e) {
console.log("Connection established!");
};
conn.onmessage = function(e) {
console.log(e.data);
};
在服务器上我打开一个命令行并执行这个 telnet localhost 8080
我得到一个命令行,当我从控制台触发上面的代码时,我在服务器的命令行中看到了这个
但几秒钟后,我在控制台中收到此错误
WebSocket connection to 'wss://10.0.4.160:8443/' failed: Error in connection establishment: net::ERR_TIMED_OUT
如果我尝试使用发送命令,则会conn.sent('Hello')
收到此错误
VM289:2 Uncaught DOMException: Failed to execute 'send' on 'WebSocket': Still in CONNECTING state.
at Error (native)
at <anonymous>:2:6
at Object.InjectedScript._evaluateOn (<anonymous>:905:140)
at Object.InjectedScript._evaluateAndWrap (<anonymous>:838:34)
at Object.InjectedScript.evaluate (<anonymous>:694:21)
此外,我尝试通过添加debug = 7
这就是我在 stunnel 控制台中得到的。我不明白出了什么问题,因为日志显示客户端已连接但我无法将消息从客户端发送到服务器
2015.08.16 16:40:06 LOG7[36]: Service [websockets] started
2015.08.16 16:40:06 LOG5[36]: Service [websockets] accepted connection from 10.0.4.195:21963
2015.08.16 16:40:06 LOG6[36]: s_connect: connecting 127.0.0.1:8080
2015.08.16 16:40:06 LOG7[36]: s_connect: s_poll_wait 127.0.0.1:8080: waiting 10 seconds
2015.08.16 16:40:06 LOG5[36]: s_connect: connected 127.0.0.1:8080
2015.08.16 16:40:06 LOG5[36]: Service [websockets] connected remote server from 127.0.0.1:50891
2015.08.16 16:40:06 LOG7[36]: Remote socket (FD=668) initialized
2015.08.16 16:40:06 LOG6[36]: SNI: sending servername: localhost
2015.08.16 16:40:06 LOG7[36]: SSL state (connect): before/connect initialization
2015.08.16 16:40:06 LOG7[36]: SSL state (connect): SSLv2/v3 write client hello A
我在这里做错了什么?怎么连接一直失败?