WSS over Secure SSL 连接仅在 FireFox 上失败,错误 1006

Posted

技术标签:

【中文标题】WSS over Secure SSL 连接仅在 FireFox 上失败,错误 1006【英文标题】:WSS over Secure SSL connection fails only on FireFox with error 1006 【发布时间】:2020-09-19 07:29:11 【问题描述】:

我的网站在 IIS 10.0 (iisnode 0.2.21) / node/express 上的 https/ssl(有效 CA 证书)上运行。我在 https 服务器(相同端口)之上使用 websocket 服务器

但是,websocket 连接对于 CHrome 和 IE11 非常有效。它仅对 Firefox(80 版)失败,错误代码为 1006 (error details)

在 Inspector / Network 控制台中,它给出以下错误error as shown in network under inspector console

在 web.config 文件中,我添加了以下行 <webSocket enabled="false"/>

app.js 代码如下:

var cors = require('cors');
var createError = require('http-errors');
var cookieParser = require('cookie-parser');
const https = require("https");
// var app = express();
var app = require('express-ws-routes')();

.....

var wsRouter = require("./routes/wsRoute"); // route for Websocket

....
app.use('/ws', wsRouter);

....
app.listen(process.env.PORT || 443);

在我的 Websocket 路由中,我使用以下代码

router.websocket('/', function(info, cb,  next) 
    
    var connid = info.req.query.connid;
    var pgid = info.req.query.pageid;

    cb(function(socket)    
        // socket is connected   
        socket.send(JSON.stringify('response_type':'WSConnActive',
                            'response':"status":"success","details":"Welcome Message","reqOrigin":"Home","welcomeMsg":'Hello '+usr+', Welcome! you are now connected!'));

....
 socket.on('message', function incoming(message)   // handle message 

socket.on("close", function socketClose(ws)
            console.log(info.req.query.usr+" closed session at "+moment().format("YYYY-MM-DD HH:mm:ss"));
            var usrClose = info.req.query.usr;
...
);  );

在客户端我连接 var socket = new WebSocket('wss://<host>:443/ws?request_type=init&usr='+UserID+'&connid='+connectTime+'&pageid='+page_ID);

除了 firefox 之外,所有这些都对 Chrome 和 IE11 正常工作

我不确定问题出在哪里.. 任何帮助表示赞赏!

【问题讨论】:

【参考方案1】:

借助 iisnode githun ([https://github.com/tjanczuk/iisnode/issues/497][1]) 中的注释,终于让 WSS 在 Firefox 上运行了!问题似乎与 iisnode 配置有关,此外,我还创建了一个 HTTP_CONNECTION 服务器变量并添加了如下重写规则,

                  <match url="ws/*" />      
                  <serverVariables>
                      <set name="HTTP_CONNECTION" value="Upgrade" />
                  </serverVariables>                    
                  <action type="Rewrite" url="websocket-server.js" />
            </rule> ```




  [1]: https://github.com/tjanczuk/iisnode/issues/497

【讨论】:

以上是关于WSS over Secure SSL 连接仅在 FireFox 上失败,错误 1006的主要内容,如果未能解决你的问题,请参考以下文章

在 SSL WebSocket 连接 (wss) 中拦截请求

mqtt使用WebSocket over TLS(wss)握手失败

engine.io/wss/SSL/HTTP:如何配置?

使用多域 SSL SAN 证书无法在 Chrome 中建立 wss websocket 连接

EMQx Mqtt Broker WSS Web套接字连接失败,我正在使用Letsencrypt SSL Certbot

Fortify Audit Workbench Cookie Security: Cookie not Sent Over SSL