#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
вкладку в инструментах разработчика. Посмотрите, отображается ли там какая-либо проблема. Вы также можете попробовать использовать скрипача, чтобы проверить и найти проблему, связанную с сетью. Кроме того, вы можете попробовать проверить этот пример кода , чтобы определить, закрыто или разорвано соединение.