Рубрики
Uncategorized

Node.js: TLS Socket — сервер и клиент

Единственными важными различиями между этим и обычным TCP -соединением являются личный ключ и Publ … Tagged с сервером, DevOps, WebDev, разработчиком.

Единственными важными различиями между этим и обычным TCP -соединением являются личный ключ и общественный сертификат, который вам придется установить в объект опции.

Первым шагом в этом процессе безопасности является создание закрытого ключа. А что это за личный ключ? По сути, это набор случайного шума, который используется для шифрования информации. Теоретически, вы можете создать один ключ и использовать его, чтобы зашифровать все, что вы хотите. Но лучше всего иметь разные ключи для конкретных вещей. Потому что, если кто -то крадет вашего личного ключа, это похоже на то, что кто -то украдет ваши ключи от дома. Представьте себе, если вы использовали тот же ключ, чтобы заблокировать свой автомобиль, гараж, офис и т. Д.

openssl genrsa -out private-key.pem 1024

После того, как у нас появится личный ключ, мы сможем создать CSR (запрос на подписание сертификата), который является нашей просьбой подписан личный ключ. Вот почему вы должны вводить информацию, связанную с вашей компанией. Эта информация будет просмотреть органом подписания и будет использоваться для проверки вас. В нашем случае не имеет значения, что вы печатаете, так как на следующем шаге мы сами подпишусь на наш сертификат.

openssl req -new -key private-key.pem -out csr.pem

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

openssl x509 -req -in csr.pem -signkey private-key.pem -out public-cert.pem

Теперь, когда у вас есть закрытый ключ и общественный сертификат, вы можете установить безопасное соединение между двумя приложениями Nodejs. И, как вы можете видеть в примере кода, это очень простой процесс.

Важный! Поскольку мы сами создали общественный сертификат, честно говоря, наш сертификат бесполезен, потому что мы совместно. Сервер Nodejs не доверяет такому сертификату по умолчанию, и именно поэтому мы должны сказать ему фактически доверять нашему сертификату со следующим Опция отклонить отмену: false Анкет Очень важно: никогда не устанавливайте эту переменную в True в производственной среде.

use strict';
var tls = require('tls');
var fs = require('fs');
const PORT = 1337;
const HOST = '127.0.0.1'
var options = {
 key: fs.readFileSync('private-key.pem'),
 cert: fs.readFileSync('public-cert.pem')
};
var server = tls.createServer(options, function(socket) {
 // Send a friendly message
 socket.write("I am the server sending you a message.");
 // Print the data that we received
 socket.on('data', function(data) {
console.log('Received: %s [it is %d bytes long]',
 data.toString().replace(/(\n)/gm,""),
 data.length);
 });
 // Let us know when the transmission is over
 socket.on('end', function() {
 console.log('EOT (End Of Transmission)');
 });
});
// Start listening on a specific port and address
server.listen(PORT, HOST, function() {
 console.log("I'm listening at %s, on port %s", HOST, PORT);
});
// When an error occurs, show it.
server.on('error', function(error) {
 console.error(error);
 // Close the connection after the error occurred.
 server.destroy();
});

'use strict';
var tls = require('tls');
var fs = require('fs');
const PORT = 1337;
const HOST = '127.0.0.1'
// Pass the certs to the server and let it know to process even unauthorized certs.
var options = {
 key: fs.readFileSync('private-key.pem'),
 cert: fs.readFileSync('public-cert.pem'),
 rejectUnauthorized: false
};
var client = tls.connect(PORT, HOST, options, function() {
 // Check if the authorization worked
 if (client.authorized) {
 console.log("Connection authorized by a Certificate Authority.");
 } else {
 console.log("Connection not authorized: " + client.authorizationError)
 }
 // Send a friendly message
 client.write("I am the client sending you a message.");
});
client.on("data", function(data) {
 console.log('Received: %s [it is %d bytes long]',
 data.toString().replace(/(\n)/gm,""),
 data.length);
 // Close the connection after receiving the message
 client.end();
});
client.on('close', function() {
 console.log("Connection closed");
});
// When an error ocoures, show it.
client.on('error', function(error) {
 console.error(error);
 // Close the connection after the error occurred.
 client.destroy();
});

С учетом всего этого, я настоятельно рекомендую вам продолжать учиться!

Спасибо, что прочитали эту статью. Пожалуйста, не стесняйтесь общаться со мной на LinkedIn и Twitter Анкет

Оригинал: «https://dev.to/rajeshkumaryadavdotcom/tls-socket-server-and-client-1pe8»