Шифрование / дешифрование Node.js Piped Socket - PullRequest
0 голосов
/ 07 апреля 2019

Я использую сетевой модуль 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]);

Можно ли как-то определить направление потока данных после передачи по каналу или определить, зашифрованы ли уже данные для определенного направления?Или, если кто-то может указать мне другое направление, я буду рад выслушать.

Буду очень признателен за любую помощь или понимание.

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