Let’s Encrypt SSL Add-On dengan NodeJS
Platform ini mengotomatisasi binding sertifikat SSL untuk sebagian besar stack software ketika bekerja dengan add-on Let’s Encrypt. Namun, otomatisasi out-of-box mengalami kesulitan untuk Node.js nodes karena spesifikasi stack. Dalam aplikasi Node.js, sertifikat Let’s Encrypt diterbitkan tetapi tidak terikat - hanya disimpan di direktori /var/lib/jelastic/keys. Anda bisa menggunakannya secara manual dalam aplikasi Anda dengan membuat server Web dan membaca sertifikat langsung dari kode.
Sebagai alternatif, Anda dapat menempatkan load balancer node di depan server Node.js Anda untuk bertindak sebagai reverse proxy. Add-on Let’s Encrypt SSL dapat diinstal pada balancer seperti itu, memanfaatkan otomatisasi out-of-box. Pendekatan seperti ini lebih disukai untuk proyek besar yang ingin menggunakan fitur horizontal scaling karena akan membutuhkan node load balancer juga.
Panduan ini akan memberikan contoh dasar bagaimana Anda dapat mengimplementasikan add-on Let’s Encrypt SSL untuk aplikasi Node.js.
Menggunakan SSL dengan NodeJS
1. Buat environment dengan server aplikasi Node.js.
2. Install add-on Let’s Encrypt untuk menghasilkan sertifikat SSL gratis untuk aplikasi Anda.
Karena spesifikasi mesin Node.js, add-on Let’s Encrypt hanya menghasilkan sertifikat SSL. Anda harus menyesuaikan kode aplikasi Anda untuk membaca sertifikat dari:
- /var/lib/jelastic/keys/privkey.pem
- /var/lib/jelastic/keys/fullchain.pem
- /var/lib/jelastic/keys/ca.cer
3. Buat aplikasi baru atau integrasikan konfigurasi HTTPS ke dalam aplikasi yang sudah ada. Lihat contoh di bawah ini:
- aplikasi baru – ganti konten file server.js default di direktori /home/jelastic/ROOT
const https = require('node:https');
const fs = require('node:fs');
const options = {
key: fs.readFileSync('/var/lib/jelastic/keys/privkey.pem'),
cert: fs.readFileSync('/var/lib/jelastic/keys/fullchain.pem')
};
https.createServer(options, (req, res) => {
res.writeHead(200);
res.end('hello world\n');
}).listen(443);
console.log("The HTTPS server has started at: https://localhost:443/");
- aplikasi yang sudah ada – misalnya, terapkan paket default “Hello World” dan edit file /home/jelastic/ROOT/server.js agar dapat bekerja melalui HTTPS
#!/usr/bin/env node
var https = require("https"),
url = require("url"),
ejs = require("ejs"),
fs = require("fs"),
os = require("os"),
staticResource = require("static-resource"),
port = 443,
serverUrl,
handler,
favicon;
const options = {
key: fs.readFileSync('/var/lib/jelastic/keys/privkey.pem'),
cert: fs.readFileSync('/var/lib/jelastic/keys/fullchain.pem')
};
serverUrl = "https://localhost:" + port + "/";
handler = staticResource.createHandler(fs.realpathSync("./public"));
favicon = fs.realpathSync('./public/favicon.png');
https.createServer(options, function (req, res) {
var path = url.parse(req.url).pathname;
if (path === "/") {
res.writeHead(200, {"Content-Type": "text/html"});
res.write(ejs.render(fs.readFileSync("./index.ejs", "utf8"), {
hostname: os.hostname()
}));
res.end();
} else if (req.method === 'GET' && path === '/favicon.png') {
res.setHeader('Content-Type', 'image/png');
fs.createReadStream(favicon).pipe(res);
} else {
if (!handler.handle(path, req, res)) {
res.writeHead(404);
res.write("404");
res.end();
}
}
}).listen(port);
console.log("The HTTPS server has started at: " + serverUrl);
4. Jalankan aplikasi Anda melalui Web SSH. Dalam contoh kami, kami menggunakan forever process manager (sudo diperlukan untuk mendengarkan port 443 yang memiliki hak istimewa).
cd /home/jelastic/ROOT
sudo forever start server.js
The command should be adjusted for different process managers. Or you can start your application without it:1sudo node server.js
Itu saja! Pergi ke aplikasi Node.js Anda melalui https:// untuk memverifikasi akses dan validitas sertifikat.
Pembaruan Sertifikat
Sertifikat Let’s Encrypt SSL tetap berlaku selama 90 hari. Setelah itu, sertifikat tersebut harus diperbarui agar enkripsi tetap valid. Add-on menyediakan pembaruan otomatis 30 hari sebelum kedaluwarsa. Namun, setelah pembaruan sertifikat, Anda perlu me-restart (reload lebih disukai, jika memungkinkan) server untuk menerapkan sertifikat baru.
Proses ini dapat diotomatisasi bersamaan dengan pembaruan sertifikat menggunakan webhooks – skrip khusus yang dieksekusi setelah operasi add-on default.
Pergi ke folder /var/lib/jelastic/keys/letsencrypt (buat jika tidak ada) dan tambahkan file settings-custom. Berdasarkan Node.js process manager, skrip muat ulang/restart Anda mungkin berbeda. Contoh:
deployHook=sudo forever restart /home/jelastic/ROOT/server.js
Sebagai alternatif, Anda dapat menyediakan skrip .sh dengan perintah yang diperlukan:
- deployHook: /path/to/your/file.sh Pastikan file skrip Anda dapat dieksekusi (chmod +x {fileName}). Sebagai contoh, isi skrip dapat seperti berikut:
#!/bin/bash
echo "This is example of deployHook script" >> /tmp/testFile
Selain itu, Anda dapat mengkonfigurasi update hook melalui API dengan menggunakan parameter deployHook. Lihat artikel Let’s Encrypt SSL untuk detail lebih lanjut.
Anda dapat memicu pembaruan sertifikat secara manual dari menu Add-Ons untuk server Node.js Anda.
Rekomendasi Tambahan
- Buat variabel environment dengan jalur ke sertifikat Let’s Encrypt untuk menghindari “hardcoding” dan menyederhanakan pengeditan jika lokasi sertifikat berubah.
- Let’s Encrypt certificate - /var/lib/jelastic/keys/fullchain.pem
- Let’s Encrypt private key - /var/lib/jelastic/keys/privkey.pem
- Saat bekerja dengan Let’s Encrypt add-on via API, Anda dapat menggunakan parameter deployHook untuk menangani logika khusus setelah sertifikat diterbitkan/diperbarui.