Как установить безопасное соединение через веб-сокет с сервером узла, используя самозаверяющие сертификаты? - PullRequest
0 голосов
/ 30 августа 2018

У меня есть веб-страница HTTPS, которая не позволяет мне подключаться к небезопасной веб-розетке, которую я использовал для связи с сервером узлов, поэтому я пытаюсь перенести свой сервер узлов на https. Страница https на стороне клиента была предоставлена ​​мне для интеграции моей ранее небезопасной страницы, поэтому я ничего не знаю о сертификатах, которые она использует, если это имеет значение.

Чтобы подключиться к нему, на стороне клиента я использовал connection = new Websocket('ws://node_server_address'), который отлично работал для небезопасных соединений. Теперь, когда страница использует https, я просто использую connection = new Websocket('wss://node_server_address'), и я надеюсь, что это все, что мне нужно изменить на стороне клиента. Однако при наличии самозаверяющих сертификатов на сервере узлов я получаю эту ошибку при попытке подключиться к Chrome:

Websocket connection to 'wss://address' failed: Error in connection establishment: net::ERR_CERT_AUTHORITY_INVALID

В Firefox все, что он говорит мне, это то, что он не может подключиться к серверу. Я видел множество примеров, когда они вообще не указывают CA, и они предположительно работают нормально, поэтому я надеюсь, что мне не придется с этим связываться. Тем не менее, если предположить, что единственное решение состоит в том, чтобы указать какой-либо действительный центр сертификации, как мне сгенерировать его для самозаверяющего сертификата?

Узловой сервер:

const https = require('https');
const WebSocketServer = require('websocket').server;

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

let serverOptions = {
    key: fs.readFileSync("./self-signed.key"),
    cert: fs.readFileSync("./self-signed.cert"),
    requestCert: false,
    rejectUnauthorized: false
}

const server = https.createServer(serverOptions, (req, res) => { res.end('') });

server.listen(port, function() { /* Logging */ }

const wsServer = new WebSocketServer({
    httpServer:server
});
...