aprenoir
@aprenoir
программный архитектор

Как заставить работать WebSockets на HTTPS?

Недавно перевел сервер на HTTPS, после перехода перестали работать WebSockets.

На клиенте был изменен протокол с ws на wss. На сервере (работает на NODE JS) также были подключены файлы сертификатов и выполнены необходимые настройки. В результате сейчас на клиентах вываливается ошибка:

WebSocket connection to 'wss://XXX.XX.XXX.XXX:4433/' failed: WebSocket opening handshake was canceled


Код серверной части на Node JS:

var https = require('https');
    var WebSocketServer = require('ws'), fs = require('fs');
    var port = 4433; 
    var app	= null;

    var processRequest = function( req, res ) {
        res.writeHead(200);
        res.end("All glory to WebSockets!\n");
    };

    app = https.createServer({
        key: fs.readFileSync('/etc/nginx/ssl/server.key'),
        cert: fs.readFileSync('/etc/nginx/ssl/bundle.crt'),
		requestCert: true,
		rejectUnauthorized: false,
    }, processRequest ).listen(port);

    var webSocketServer = new WebSocketServer.Server( { server: app } );


Как подружить Websockets с HTTPS?
  • Вопрос задан
  • 3436 просмотров
Решения вопроса 2
bingo347
@bingo347 Куратор тега Node.js
Crazy on performance...
Очевидно браузер посылает куда подальше Ваш сертификат
Сертификат выдается на домен а не ip адрес, обращайтесь к вебсокету через домен прописанный в сертификате, в dns должна быть А запись связывающая домен и ip адрес
Ответ написан
aprenoir
@aprenoir Автор вопроса
программный архитектор
Как оказалось, в этой проблеме было целых 2 нюанса:

- первый заключался в адресе обращения к wss (спасибо Дмитрий Беляев)
- второй в том, что необходимо было убрать из настроек подключения "requestCert: true" (спасибо @andreyma со stackoverflow).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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