Проблема с сетью узла WebSocket (wss)

#node.js #express #internet-explorer #websocket #wss

#node.js #экспресс #internet-explorer #websocket #wss

Вопрос:

Я создаю приложение на node-express, используя библиотеку WS для подключения к websocket (wss).

все отлично работает с Chrome, но не в Explorer (11) и FireFox, пытался играть с шифрами и версией TLS, но все равно не может подключиться, и я мог бы использовать только самоподписывающийся сертификат. Я попытался создать POC все на том же уровне — я не смог подключиться из Internet Explorer; Вот пример кода:

 const express = require('express');
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
const path = require('path');
const app = express();
const port = 3000;
const https = require('https');
const fs = require('fs');
let server
let serverOptions = {};
const WebSocket = require('ws');
app.use(bodyParser.urlencoded({ expected: false }));
app.use(bodyParser.json());
app.use(cookieParser);
const constants = require('constants');



let ciphers_new = ['TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384',
                    'TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256',
                    'TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256',
                    'TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256',
                    'TLS_DHE_RSA_WITH_AES_256_GCM_SHA384',
                    'TLS_DHE_RSA_WITH_AES_128_GCM_SHA256',
                    'TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384',
                    'TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256',
                    'TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384',
                    'TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384',
                    'TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256',
                     'aes128-gcm-sha256',
  'aes128-sha',
  'aes128-sha256',
  'aes256-gcm-sha384',
  'aes256-sha',
  'aes256-sha256',
  'dhe-psk-aes128-cbc-sha',
  'dhe-psk-aes128-cbc-sha256',
  'dhe-psk-aes128-gcm-sha256',
  'dhe-psk-aes256-cbc-sha',
  'dhe-psk-aes256-cbc-sha384',
  'dhe-psk-aes256-gcm-sha384',
  'dhe-psk-chacha20-poly1305',
  'dhe-rsa-aes128-gcm-sha256',
  'dhe-rsa-aes128-sha',
  'dhe-rsa-aes128-sha256',
  'dhe-rsa-aes256-gcm-sha384',
  'dhe-rsa-aes256-sha',
  'dhe-rsa-aes256-sha256',
  'dhe-rsa-chacha20-poly1305',
  'ecdhe-ecdsa-aes128-gcm-sha256',
  'ecdhe-ecdsa-aes128-sha',
  'ecdhe-ecdsa-aes128-sha256',
  'ecdhe-ecdsa-aes256-gcm-sha384',
  'ecdhe-ecdsa-aes256-sha',
  'ecdhe-ecdsa-aes256-sha384',
  'ecdhe-ecdsa-chacha20-poly1305',
  'ecdhe-psk-aes128-cbc-sha',
  'ecdhe-psk-aes128-cbc-sha256',
  'ecdhe-psk-aes256-cbc-sha',
  'ecdhe-psk-aes256-cbc-sha384',
  'ecdhe-psk-chacha20-poly1305',
  'ecdhe-rsa-aes128-gcm-sha256',
  'ecdhe-rsa-aes128-sha',
  'ecdhe-rsa-aes128-sha256',
  'ecdhe-rsa-aes256-gcm-sha384',
  'ecdhe-rsa-aes256-sha',
  'ecdhe-rsa-aes256-sha384',
  'ecdhe-rsa-chacha20-poly1305',
  'psk-aes128-cbc-sha',
  'psk-aes128-cbc-sha256',
  'psk-aes128-gcm-sha256',
  'psk-aes256-cbc-sha',
  'psk-aes256-cbc-sha384',
  'psk-aes256-gcm-sha384',
  'psk-chacha20-poly1305',
  'rsa-psk-aes128-cbc-sha',
  'rsa-psk-aes128-cbc-sha256',
  'rsa-psk-aes128-gcm-sha256',
  'rsa-psk-aes256-cbc-sha',
  'rsa-psk-aes256-cbc-sha384',
  'rsa-psk-aes256-gcm-sha384',
  'rsa-psk-chacha20-poly1305',
  'srp-aes-128-cbc-sha',
  'srp-aes-256-cbc-sha',
  'srp-rsa-aes-128-cbc-sha',
  'srp-rsa-aes-256-cbc-sha',
  'tls_aes_128_ccm_8_sha256',
  'tls_aes_128_ccm_sha256',
  'tls_aes_128_gcm_sha256',
  'tls_aes_256_gcm_sha384',
  'tls_chacha20_poly1305_sha256'
                ].join(':').toUpperCase();

console.log('here ',sslConfig.minimumTLSVersion)
    
serverOptions = {
    ca:fs.readFileSync(  './ca.pem'),
    key: fs.readFileSync( './key.pem'),
    cert: fs.readFileSync('./cert.pem'),
    honorCipherOrder: true,
    ciphers:ciphers_new,

  };


server = https.createServer(serverOptions, app);
    const handler = (req,res)=>{
        res.writeHead(200, {'Content-Type': 'text/plain'});
        res.end('Hello Worldn');   
    }

server.addListener("request", handler);


const wss = new WebSocket.Server({ server,
  handleProtocols: (protocols, client) => {
    return protocol;
} });

wss.on('connection', (ws) => {
  wsCount  ;
  ws.send('give_cookie');

  ws.on('close', () => {
    wsCount--;
  })
})

wss.on('close',(e)=>{
    console.log('here we close')
})




server.listen(port, () => {
    console.log(`Server is listening on port:${port}`);
});
    

Комментарии:

1. Вы получаете какое-либо сообщение об ошибке в консоли браузера? Я вижу, что вы используете => функции со стрелками, которые не поддерживаются в браузере IE. Вы переносите код? Я пытаюсь проверить ссылку на библиотеку и нашел в ней эту заметку . Это также может быть возможной причиной, по которой он не работает.

2. @Deepak-MSFT этот код я запускаю на NodeJS на своем сервере.

3. Приведенный выше код не дает никакого представления о причине проблемы. Я предлагаю вам перейти на Network вкладку в инструментах разработчика. Посмотрите, отображается ли там какая-либо проблема. Вы также можете попробовать использовать скрипача, чтобы проверить и найти проблему, связанную с сетью. Кроме того, вы можете попробовать проверить этот пример кода , чтобы определить, закрыто или разорвано соединение.