Единственными важными различиями между этим и обычным 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»