Задать вопрос
@cyber_user

Как использовать WSS вместо WS в Node.js?

Здравствуйте, имеется облачный сервер, на нем развернут WS сервер. Понадобилось теперь использовать wss:// в место ws://.
Написал в саппорт, мне выдали самоподписанный SSL (my_key.key, my_cert.crt).
Воспользовавшиеся темой Как использовать WSS вместо WS в Node.js? прописал так:
const serverOptions = {
  key: fs.readFileSync('my_key.key'),
  cert: fs.readFileSync('my_cert.crt')
}
var http = require('https').createServer(app,serverOptions);

const ws = new WebSocket.Server({port:3000});

	ws.on('connection',(socket,req)=>{
        .......


Но не подключается клиент с помощью WSS://

Вопросы
1) Самоподписанный SSL здесь не подходит?
2) Где можно купить SSl другой для ip адреса по сути, так как где мне сделали самоподписанный ssl сказали по другому помочь не могут.
3) Или быть может я делаю что то не так в коде?
  • Вопрос задан
  • 644 просмотра
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 3
bingo347
@bingo347 Куратор тега Node.js
Crazy on performance...
Вариант 1 (правильный):
1. поставить nginx или haproxy и настроить tls там
2. настроить в nginx/haproxy реверс прокси на ноду
3. порты ноды закрыть от внешнего мира, слушать только localhost или vlan

Вариант 2:
В настройках WebSocket передавать не порт, а инстанс https сервера
https://www.npmjs.com/package/ws#external-https-server

Ну и наконец, зачем самоподписанный сертификат, когда есть Let's Encrypt?
Ну и записать в сертификат IP адрес не получится, нужен домен
Ответ написан
@XEHKOK
Вообще данный вопрос решается так, в Google: ssl сертификат для ip адреса
Первые 3-5 результатов поиска в гугле отвечают на ваш вопрос, но если по каким-то причинам гуг не для вас то вот ответы:
А SSL-сертификат можно и для IP без домена?
https://coderoad.ru/2043617
bingo347 Уже написал более норм способ lets encrypt, а еще можно как вариант заюзать traefik для проксирования на нужный сервис.
Ответ написан
Комментировать
@cyber_user Автор вопроса
Ребят, всем спасибо, проблема решена!
var app = require('express')();
var fs  = require('fs');
const serverOptions = {
  key: fs.readFileSync('my_key.key'),
  cert: fs.readFileSync('my_cert.crt')
}
var https = require('https');
var mysql = require('mysql');
var WebSocket = require('ws');


const server = https.createServer(serverOptions,(req,res)=>{
	console.log("Connected");
});

const ws = new WebSocket.Server({server});

....


server.listen(3000);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы