Использование SSL через TCP для установления безопасного соединения между двумя серверами с NodeJS
Я пытаюсь отправить пакет с одного сервера на другой, но мне нужно быть уверенным, что отправитель является "реальным", и пакет не может быть перехвачен. Как я могу сделать это, используя SSL с NodeJS или каким-либо другим способом.
Вот что я сделал:
Код сервера:
server = tls.createServer(function(c) {
console.log('server connected',
c.authorized ? 'authorized' : 'unauthorized');
});
Код клиента:
var tls = require('tls');
var fs = require('fs');
var options = {
key : fs.readFileSync('server.key'),
cert : fs.readFileSync('server.crt')
};
var client = tls.connect(9838, options, function () {
console.log(client.authorized ? 'Authorized' : 'Not authorized');
});
и это ошибки:
Error: 101057795:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv handshake failure:openssl\ssl\s23_clnt.c:769:
1 ответ
Чтобы гарантировать, что отправитель (клиент) является "реальным", вы можете попробовать использовать аутентификацию клиента TLS (или взаимную аутентификацию). Это означает, что вам понадобится сертификат клиента (и ключ), сертификат сервера (и ключ), сертификат CA, который выдал / подписал сертификат сервера, и сертификат CA, который выдал / подписал сертификат клиента.
Во-первых, ваш TLS-сервер должен будет предоставить свой сертификат любым подключающимся TLS-клиентам; это означает, что вам нужно настроить его сертификат и ключ. Вы также захотите, чтобы сервер TLS запросил, чтобы клиент отправил свой сертификат на сервер, как часть рукопожатия:
var tlsOptions = {
cert: fs.readFileSync('server-cert.pem'),
key: fs.readFileSync('server-key.pem'),
ca: [ fs.readFileSync('client-ca-cert.pem'),
requestCert: true,
rejectUnauthorized: true
};
var server = tls.createServer(tlsOptions, function () {
Затем для клиента вы настраиваете его с его сертификатом и ключом, а также сертификатом CA, который выдал / подписал сертификат сервера (чтобы клиент мог убедиться, что получатель является "реальным"):
var tlsOptions = {
host: 'server.example.com',
port: 9838,
cert: fs.readFileSync('client-cert.pem'),
key: fs.readFileSync('client-key.pem'),
ca: [ fs.readFileSync('server-ca-cert.pem')
};
var client = tls.connect(tlsOptions, function () {
Надеюсь это поможет!