Ebook NodeJS Notes for Professionals Bagian 1.10: TLS Socket server dan client

Ebook NodeJS Notes for Professionals Bagian 1.10: TLS Socket server dan client


Satu-satunya perbedaan utama antara ini dan koneksi TCP biasa adalah private key dan sertifikat publik yang harus kita atur menjadi objek opsi.

Cara Membuat Kunci dan Sertifikat

Langkah pertama dalam proses keamanan ini adalah pembuatan private key. Dan apa private key ini? Pada dasarnya, ini adalah set noise acak yang digunakan untuk mengenkripsi informasi. Secara teori, kita bisa membuat satu kunci, dan menggunakannya untuk mengenkripsi apa pun yang kita inginkan. Tetapi praktik terbaik adalah memiliki kunci yang berbeda untuk hal-hal tertentu. Karena jika seseorang mencuri private key, ini mirip dengan seseorang mencuri kunci rumah. Bayangkan jika kita menggunakan kunci yang sama untuk mengunci mobil, garasi, kantor, dll.

openssl genrsa -out private-key.pem 1024

Setelah memiliki private key, kita dapat membuat CSR (certificate signing request), yang merupakan permintaan untuk memiliki private  key yang diakui oleh otoritas. Itu sebabnya kita harus memasukkan informasi yang terkait dengan perusahaan. Informasi ini akan dilihat oleh otoritas, dan digunakan untuk memverifikasi. Dalam kasus, apa pun yang kita ketik tidak masalah, karena pada langkah berikutnya akan memverifikasi sendiri sertifikat kita.

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

Sekarang setelah kita mengisi kertas kerja, saatnya berpura-pura bahwa kita adalah otoritas yang keren

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

Sekarang setelah kita memiliki private key dan sertifikat publik, kita dapat membuat koneksi aman antara dua aplikasi NodeJS. Dan, seperti yang kita lihat dalam kode contoh, ini adalah proses yang sangat sederhana.

Penting!
Karena kita sendiri yang menciptakan sertifikat publik, dalam semua kejujuran, sertifikat kita tidak berharga, karena kita adalah orang-orang yang tidak berharga. Server NodeJS tidak akan mempercayai sertifikat semacam itu secara default, dan itulah sebabnya perlu mengatakannya untuk benar-benar mempercayai sertifikat kita dengan opsi berikut ini ditolak. Sangat penting: jangan pernah mengatur variabel ini menjadi true dalam production environment.

TLS Socket Server

'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();
});

TLS Socket Client

'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();
});


Kembali ke Tutorial NodeJS : Membedah Ebook NodeJS Notes For Professionals
LihatTutupKomentar