Добавлен SSL на клиентский сервер, но по-прежнему не выполняется рукопожатие с узлами внутреннего сервера

#node.js #express #security #ssl #tls1.2

#node.js #экспресс #Безопасность #ssl #tls1.2

Вопрос:

Я пытаюсь внедрить SSL в свой проект nodejs. В настоящее время мои серверы разделены между клиентским сервером, работающим на локальном хост-порту 443, и серверным сервером, работающим на локальном хост-порту 5000. Я уже добавил самозаверяющий SSL-сертификат OpenSSL на свой клиентский сервер, как показано ниже.Сертификат SSL

Теперь вот моя проблема. Насколько я понимаю, когда я отправляю запрос post для входа в систему, предполагается, что между сервером и клиентом должно произойти рукопожатие для установления безопасного соединения. Однако это не так. Когда я использовал Wireshark для перехвата пакетов, в процессе не происходит рукопожатия.

Пакет Wireshark tracing login API

В настоящее время я не уверен, как действовать дальше, потому что у меня ограниченные знания по такого рода темам безопасности. Нужно ли мне подписывать новый ключ и сертификат и добавлять их на свой серверный сервер? Или я все делаю неправильно? Если да, могу ли я получить источник или руководство о том, как правильно создать его для сервера nodejs?

Ответ №1:

здесь у вас есть много вариантов защиты вашего внутреннего сервера :

во-первых, вы можете использовать обратный прокси-сервер Nginx и добавить к нему логику ssl / tls. nginx справится с этим за вас.

во-вторых, вы можете напрямую использовать пакет [https] [1] и передать ему свой SSL-сертификат и ключ :

 const https = require('https');
const fs = require('fs');

const options = {
  key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),
  cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem')
};

https.createServer(options, (req, res) => {
  res.writeHead(200);
  res.end('hello worldn');
}).listen(8000);
 

помните, что доменное имя, к которому вы пытаетесь получить доступ, должно быть задано в вашем IP-адресе хоста.
[1]: https://nodejs.org/api/https.html