Membuat server https dengan node.js

Menyambung artikel sebelumnya mengenai manajemen routing pada nodejs, kali ini kita akan mencoba membuat server https dengan nodejs. Seperti biasa kita gunakan file-file yang sudah dibuat pada sesi-sesi sebelumnya.

Sebelum update script, kita akan mengenerate terlebih dahulu 2 buah file yang dibutuhkan untuk konfigurasi server https. Buat folder dengan nama https di workspace kita. Buka terminal, masuk ke direktori https yang telah kita buat lalu copy paste command di bawah ini.

openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem

Isi option sesuai dengan data-data Anda sendiri seperti pada gambar di bawah ini.

openssl_server_https_nodejs

Setelah proses di atas selesai maka pada folder https akan terbentuk dua buah file yaitu key.pem dan cert.pem.

key_cert_pem_server_https_nodejs

Kedua file di atas kita perlukan untuk option https server yang akan kita buat.

Buka file index.js yang telah kita buat sebelumnya.

index.js

//gunakan module http
var http = require("http");
var url = require("url");

//buat variabel server untuk handle request dan respon
var server = http.createServer(function(request, respon) {
  //parsing url request
  var parsedUrl = url.parse(request.url, true);
  var path = parsedUrl.pathname;
  var trimmedPath = path.replace(/^\/+|\/+$/g, "");

  //cek path request ke router
  var currentHandler =
    typeof router[trimmedPath] !== "undefined"
      ? router[trimmedPath]
      : handlers.notfound;

  //jalankan handler yg sesuai request
  currentHandler(function(code, obj) {
    // Return data tipe json
    respon.setHeader("Content-Type", "application/json");

    respon.writeHead(code);
    respon.end(JSON.stringify(obj));
  });
});

//start server dan listening di port 3000
server.listen(3000, function() {
  console.log("server nyala dan listening di port 3000");
});

//definisikan handler
var handlers = {};

//sample handler
handlers.test = function(myCallback) {
  //callback(statusCode,objek)
  myCallback(200, { handler: "test handler" });
};

//halo handler
handlers.halo = function(myCallback) {
  //callback(statusCode,objek)
  myCallback(200, { handler: "halo handler" });
};

//notfound handler
handlers.notfound = function(myCallback) {
  //callback(statusCode,objek)
  myCallback(404, { handler: "handler tidak ditemukan" });
};

//definisikan router yang berisi handler
var router = {
  test: handlers.test,
  halo: handlers.halo
};

Ganti var http = require("http"); dengan  var https = require("https"); lalu tambahkan library fs var fs = require('fs').

Setelah itu buat variabel option untuk menampung data yang dibutuhkan oleh server https.

//option https
var options = {
  key: fs.readFileSync("./https/key.pem"),
  cert: fs.readFileSync("./https/cert.pem")
};

Seperti yang kita lihat, hanya ada dua option yaitu key dan cert yang mana kedua option tersebut mengacu ke file yang telah kita generate menggunakan openssl di folder https.

Kemudian ganti variabel server yang sebelumnya menggunakan library http menjadi https.

var server = http.createServer(function(request, respon)

//ganti dengan di bawah ini

var server = https.createServer(options, function(request, respon)
Perhatikan ada sedikit perbedaan, pada https kita perlu menambahkan parameter option yang isinya seperti pada variabel option yang telah kita buat sebelumnya. Selesai, file index.js pada akhirnya akan seperti di bawah ini.
//gunakan module http
var https = require("https");
var url = require("url");
var fs = require("fs");

//option https
var options = {
  key: fs.readFileSync("./https/key.pem"),
  cert: fs.readFileSync("./https/cert.pem")
};

//buat variabel server untuk handle request dan respon
var server = https.createServer(options, function(request, respon) {
  //parsing url request
  var parsedUrl = url.parse(request.url, true);
  var path = parsedUrl.pathname;
  var trimmedPath = path.replace(/^\/+|\/+$/g, "");

  //cek path request ke router
  var currentHandler =
    typeof router[trimmedPath] !== "undefined"
      ? router[trimmedPath]
      : handlers.notfound;

  //jalankan handler yg sesuai request
  currentHandler(function(code, obj) {
    // Return data tipe json
    respon.setHeader("Content-Type", "application/json");

    respon.writeHead(code);
    respon.end(JSON.stringify(obj));
  });
});

//start server dan listening di port 3000
server.listen(3000, function() {
  console.log("server https nyala dan listening di port 3000");
});

//definisikan handler
var handlers = {};

//sample handler
handlers.test = function(myCallback) {
  //callback(statusCode,objek)
  myCallback(200, { handler: "test handler" });
};

//halo handler
handlers.halo = function(myCallback) {
  //callback(statusCode,objek)
  myCallback(200, { handler: "halo handler" });
};

//notfound handler
handlers.notfound = function(myCallback) {
  //callback(statusCode,objek)
  myCallback(404, { handler: "handler tidak ditemukan" });
};

//definisikan router yang berisi handler
var router = {
  test: handlers.test,
  halo: handlers.halo
};

Sekarang coba run server https nodejs nya.

server_https_nodejs

Lalu coba akses url https://localhost:3000/test

Selamat mencoba.

 

tambahan bacaan :

http://onnocenter.or.id/wiki/index.php/OpenSSL

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *