Веселье при настройке сертификата WebSocket TLS - PullRequest
2 голосов
/ 15 февраля 2020

Я пытаюсь настроить WebSocket поверх TLS.

Для этого я собираюсь следовать указаниям на стр. 81 в следующей книге.

https://www.amazon.com/WebSocket-Client-Server-Communications-Andrew-Lombardi/dp/1449369278/ref=sr_1_1 ? keywords = websocket & qid = 1581782142 & sr = 8-1

Я устанавливаю код сервера, как говорится в книге. Все хорошо, но есть некоторые проблемы с сертификатами.

Согласно книге я должен предпринять четыре шага по настройке сертификатов

1. Generate a 2048 bit key.
openssl genrsa -des -passout pass:x -out server.pass.key 2048

2. Generate a passphrase free key.
openssl rsa -passin pass:x -in server.pass.key -out server.key

3. Generate csr from the private key.
openssl req -new -key server.key -out server.csr

4. Generate the certificate
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Когда я запускаю шаг 1, я get error

"UI_set_result:result too small .." 

Для которого исправление здесь .

Он, по сути, говорит, что вместо шага 1 нужно запустить следующий фрагмент кода:

openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out server.key

Похоже, он пропускает часть .pass. Для чего предпринят шаг 2. Поэтому я не уверен, должен ли я сделать этот шаг или нет, после исправления.

Я выполняю эти четыре шага, затем на сервере. js У меня есть:

var connection={
    ssl:true,
    port:port_number_here,
    ssl_key:'server.key',
    ssl_cert:'server.crt'
    }

//..
var processRequest=function(req,res){
    res.writeHead(200);
    res.end("Hi!\n");
    //console.log('connecting');
    };

var app=null;
app = httpsServ.createServer({
    key: fs.readFileSync(connection.ssl_key),
    cert:fs.readFileSync(connection.ssl_cert)
    },processRequest).listen(connection.port);


var wss = new WebSocketServer({server:app});

var clients=[];
var client_number=0;
wss.on('connection', function(cclient_socket){
    console.log('Estabished Connection with client.');
    }

Тогда я запустить сервер с:

node server.js

Но когда я запускаю код клиента через Firefox, я получаю ошибку:

Firefox can’t establish a connection to the server at wss://somedomain:someportnumber/.

И в Chromium я получаю ошибку:

(index):9 WebSocket connection to 'wss://thedomain.org:theportnumber/'    
failed: Error in connection establishment: net::ERR_CERT_AUTHORITY_INVALID

Я не уверен, что делать дальше. Я предполагаю, что я как-то не правильно сделал сертификаты, но ошибка не дает мне много работы.

Любая помощь будет оценена.

ps Я пытался реализовать следующие указания , безрезультатно.

{ ссылка }

Кроме того, у меня есть подозрение, что ошибка Chromium "ERR_CERT_AUTHORITY_INVALID" является ключевой вещью здесь. Я гуглил его и обнаружил, что https://www.guildcafe.com/fix-net-err_cert_authority_invalid-error.html это связано с центром сертификации. это только я. Я все еще застрял, хотя я не знаю, как это исправить.

Ответы [ 2 ]

1 голос
/ 17 февраля 2020

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

В случае Chromium вам фактически нужно указать операционную систему вашего компьютера (не сервер, а скорее компьютер, на котором ты запускаешь Chromium). Пожалуйста, посмотрите эти инструкции для вашей ОС. Вы ищете "доверять самозаверяющему сертификату в Chrome в Ubuntu" или ".. в MacOS" или "... в Windows", или как угодно.

Firefox имеет свой собственный Пользовательский интерфейс для этой цели. Вы можете прочитать об этом тоже. Для вас это может быть более быстрый путь к успеху.

Тогда есть Let's Encrypt, с помощью которого вы можете бесплатно создать доверенный сертификат. Для учебника, проверьте это. https://itnext.io/node-express-letsencrypt-generate-a-free-ssl-certificate-and-run-an-https-server-in-5-minutes-a730fbe528ca

Мы уже веселились? Мы? Мы?

0 голосов
/ 18 февраля 2020

Решением было не создавать сертификаты, как описано в книге, а просто ссылаться на сертификаты ssl, которые уже были созданы для данного веб-сайта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...