Я использую сетевой модуль node.js 8.15 для создания сокета в двух отдельных экземплярах и передачи данных, полученных в первых экземплярах, во вторые экземпляры, используя канал из одного экземпляра в другой.Я хотел бы зашифровать трафик между двумя экземплярами, но расшифровать только на концах каналов любого экземпляра.Например, я прослушиваю порт для данных устройства в первом экземпляре (например, агента), затем передаю их второму экземпляру другого порта, а этот экземпляр прослушивает в исходном порту другое приложение для связи с исходным устройством.Так что трафик двухсторонний.Код работает, если я не использую функции шифрования или дешифрования.Но когда я пытаюсь передать данные с помощью шифрования, я не вижу устройство из своего приложения.
Я думаю, что проблема в том, что трафик шифруется в одну сторону и дешифруется в одном направлении, но ответ отлибо не шифруются, ни дешифруются, в зависимости от случая с точки зрения автоответчика.
Я проверил несколько сообщений и этого одного, но оникажется, что все имеют дело с сервером клиенту и обратно, а не шифруют / дешифруют данные на каждом конце и передают их.
Вот что я пытаюсь сделать.
+_____________+ +________+ +________+ +________+ +__________+
| | | | | | | | | |
| Application |<==>| Client |<==>| Server |<==>| Agent |<==>| Ethernet |
| Interface | | | | | | | | Device |
| Device | |>Encrypt| |<=Pipe=>| |Decrypt>| | |
| | |<Decrypt| | | |Encrypt<| | |
| | | | | | | | | |
+_____________+ +________+ +________+ +________+ +__________+
Любой вот код, который я пробовал. Если я закомментирую .pipe(decipher)
и .pipe(cipher)
, я могу видеть устройство и взаимодействовать с ним, но оно не защищено.
const cipher = crypto.createCipheriv(algorithm, key, iv);
const decipher = crypto.createDecipheriv(algorithm, key, iv);
//Add the auto padding here....IT HAVE TO BE after creating the decipher immeditely
//decipher.setAutoPadding(false);
// called from CLI - node proxy3.js 8300 192.168.0.74:44818
var addrRegex = /^(([a-zA-Z\-\.0-9]+):)?(\d+)$/;
var addr = {
from: addrRegex.exec(process.argv[2]),
to: addrRegex.exec(process.argv[3])
};
console.log('from: ', addr.from)
console.log('to: ', addr.to)
if (!addr.from || !addr.to) {
console.log('Usage: <from> <to>');
return;
}
net.createServer({'allowHalfOpen': true}, function(from) {
var to = net.createConnection({
host: addr.to[2],
port: addr.to[3]
});
from
.pipe(cipher)
.pipe(to);
from
.on('error',
function (e) {
console.log('error', e)
}
);
to
.pipe(decipher)
.pipe(from);
to
.on('error',
function (e) {
console.log('error', e)
}
);
}).listen(addr.from[3], addr.from[2]);
Можно ли как-то определить направление потока данных после передачи по каналу или определить, зашифрованы ли уже данные для определенного направления?Или, если кто-то может указать мне другое направление, я буду рад выслушать.
Буду очень признателен за любую помощь или понимание.