Tutorial ini menunjukkan kepada Anda cara membuat CSR untuk aplikasi Node.js. Node.js tidak memiliki alat pembuatan CSR bawaan, jadi Anda membuat kunci privat dan Certificate Signing Request dengan OpenSSL pada mesin yang akan menjalankan Node, mengirimkan CSR ke Certificate Authority Anda, lalu memuat sertifikat yang diterbitkan ke dalam aplikasi Anda dengan fs.readFileSync() dan https.createServer().
Langkah-langkah di bawah ini berlaku untuk sistem operasi apa pun yang menyertakan OpenSSL, yang mencakup semua distribusi Linux terkini, macOS, dan Windows (melalui binari OpenSSL resmi atau Git Bash). OpenSSL versi modern menandatangani permintaan dengan SHA-256 secara default, jadi Anda tidak perlu menambahkan flag digest.
Langkah 1: Pastikan OpenSSL sudah terinstal
Periksa apakah OpenSSL tersedia di mesin yang akan menjalankan aplikasi Node.js Anda:
openssl version
Anda akan melihat baris seperti OpenSSL 3.0.x atau versi yang lebih baru. Jika perintahnya tidak ditemukan, instal untuk platform Anda:
- Debian, Ubuntu:
sudo apt update && sudo apt install openssl - RHEL, AlmaLinux, Rocky Linux, Amazon Linux:
sudo dnf install openssl(atausudo yum install opensslpada rilis yang lebih lama) - macOS: OpenSSL (LibreSSL pada beberapa versi, OpenSSL 3 jika diinstal melalui Homebrew) sudah tersedia di Terminal. Untuk menginstal versi upstream:
brew install openssl@3. - Windows: instal binari OpenSSL resmi, atau gunakan Git Bash, yang sudah dilengkapi dengan OpenSSL secara bawaan.
Langkah 2: Buat kunci privat dan CSR
Buat kunci dan CSR pada mesin yang akan menjalankan Node.js. Kunci privat dibuat bersamaan dengan CSR dan harus tetap berada di mesin tersebut. Menjalankan perintah ini di tempat lain lalu menyalin kunci ke sana kemari menggagalkan tujuan utama dari memiliki kunci privat.
Jalankan perintah berikut. Perintah ini membuat kunci privat RSA 2048-bit dan CSR yang sesuai dalam satu langkah, dengan subject dan Subject Alternative Names (SAN) disertakan langsung sehingga OpenSSL tidak berhenti untuk menanyakan pertanyaan tambahan:
openssl req -new -newkey rsa:2048 -nodes
-keyout yourdomain.key
-out yourdomain.csr
-subj "/C=US/ST=YourState/L=YourCity/O=YourCompany/CN=yourdomain.com"
-addext "subjectAltName=DNS:yourdomain.com,DNS:www.yourdomain.com"
Fungsi setiap bagian:
- -newkey rsa:2048 menghasilkan kunci RSA baru 2048-bit. 2048-bit adalah standar minimum yang saat ini diterima oleh CA publik; Anda dapat menggunakan rsa:4096 untuk kunci yang lebih besar, atau beralih ke ECDSA (lihat di bawah).
- -nodes membiarkan kunci privat tidak terenkripsi sehingga Node.js dapat membacanya saat startup tanpa meminta passphrase. Modul https milik Node memang mendukung opsi passphrase untuk kunci terenkripsi, tetapi passphrase tersebut tetap harus berasal dari suatu tempat di mesin (file konfigurasi, variabel lingkungan, atau pengelola rahasia).
- -keyout dan -out menamai file kunci privat dan file CSR.
- -subj menyediakan subject sertifikat. Masukkan nama perusahaan, negara bagian, dan kota Anda yang sebenarnya, bukan placeholder. CN (Common Name) adalah domain utama Anda.
- -addext “subjectAltName=…” mencantumkan setiap nama host yang harus dicakup sertifikat. CA publik melakukan validasi berdasarkan daftar SAN, jadi sertakan juga Common Name di sini. Flag -addext memerlukan OpenSSL 1.1.1 atau versi yang lebih baru, yang sudah disertakan di setiap OS terkini.
Ganti yourdomain.com dengan domain Anda yang sebenarnya di seluruh perintah. Untuk mencakup nama host tambahan, tambahkan ke daftar SAN dipisahkan dengan koma, misalnya DNS:api.yourdomain.com. Untuk wildcard, sertakan baik wildcard maupun domain polos: DNS:*.yourdomain.com,DNS:yourdomain.com.
Jika Anda lebih memilih kunci ECDSA (lebih kecil dan lebih cepat, dengan P-256 yang didukung secara luas), buat kunci dan CSR seperti ini:
openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -pkeyopt ec_param_enc:named_curve -nodes
-keyout yourdomain.key
-out yourdomain.csr
-subj "/C=US/ST=YourState/L=YourCity/O=YourCompany/CN=yourdomain.com"
-addext "subjectAltName=DNS:yourdomain.com,DNS:www.yourdomain.com"
Mode interaktif (tanpa -subj)
Jika Anda lebih suka agar OpenSSL meminta Anda mengisi setiap kolom, hapus flag -subj:
openssl req -new -newkey rsa:2048 -nodes
-keyout yourdomain.key -out yourdomain.csr
-addext "subjectAltName=DNS:yourdomain.com,DNS:www.yourdomain.com"
OpenSSL akan meminta detail berikut:
- Country Name (C): kode negara ISO dua huruf dari organisasi Anda (misalnya, US).
- State or Province Name (S): nama lengkap negara bagian atau provinsi tempat perusahaan Anda terdaftar (misalnya, California). Jangan disingkat.
- Locality Name (L): kota tempat bisnis Anda terdaftar (misalnya, San Jose).
- Organization Name (O): nama resmi perusahaan Anda (misalnya, GPI Holding LLC). Untuk sertifikat DV (Domain Validated), biarkan kosong dan tekan Enter.
- Organizational Unit Name (OU): sudah tidak digunakan lagi sejak September 2022 dan diabaikan oleh CA publik. Biarkan kosong.
- Common Name (CN): nama domain lengkap yang memenuhi syarat (FQDN) yang Anda amankan, misalnya yourdomain.com. Untuk wildcard, gunakan *.yourdomain.com.
- Email Address: opsional. Biarkan kosong.
- A challenge password: sudah usang. Biarkan kosong.
Langkah 3: Temukan dan lindungi file Anda
Tampilkan daftar direktori saat ini untuk memastikan kedua file telah dibuat:
ls
Anda akan melihat dua file baru:
- yourdomain.key: kunci privat Anda. Simpan di server, cadangkan dengan aman, dan jangan pernah mengirimkannya kepada siapa pun, termasuk Certificate Authority. Siapa pun yang memegang kunci ini dapat menyamar sebagai situs Anda.
- yourdomain.csr: Certificate Signing Request Anda. Inilah file yang Anda kirimkan ke penyedia SSL.
Pada Linux atau macOS, segera atur izin akses yang ketat pada kunci privat sehingga hanya pengguna yang menjalankan Node.js yang dapat membacanya:
chmod 600 yourdomain.key
Jika Node.js berjalan di bawah akun layanan khusus (misalnya, node atau www-data), atur juga pemiliknya agar proses tersebut dapat membaca kunci:
sudo chown node:node yourdomain.key
Langkah 4: Verifikasi CSR (opsional tetapi disarankan)
Sebelum mengirimkannya, periksa apakah CSR berisi subject dan SAN yang benar serta tanda tangannya valid. Perintah ini menguraikan permintaan secara lokal dengan OpenSSL:
openssl req -noout -text -verify -in yourdomain.csr
Pastikan baris Subject menampilkan detail Anda, bahwa X509v3 Subject Alternative Name mencantumkan setiap nama host yang Anda harapkan, dan bahwa pemeriksaan tanda tangan menampilkan verify OK. Algoritma tanda tangan seharusnya menunjukkan sha256WithRSAEncryption (atau ecdsa-with-SHA256 untuk kunci ECDSA). Jika Anda lebih memilih tidak menggunakan baris perintah, tempelkan CSR ke CSR decoder online kami untuk membaca kolom-kolom yang sama di peramban.
Langkah 5: Kirimkan CSR Anda
Untuk menyalin CSR untuk pesanan Anda, tampilkan isinya:
cat yourdomain.csr
Anda akan melihat blok teks seperti ini:
-----BEGIN CERTIFICATE REQUEST-----
MIIBozCB... (a long string of characters)
-----END CERTIFICATE REQUEST-----
Salin seluruh blok, termasuk baris —–BEGIN CERTIFICATE REQUEST—– dan —–END CERTIFICATE REQUEST—– (setiap penanda memiliki lima tanda hubung di kedua sisinya). Seluruh blok tersebut adalah CSR Anda. Tempelkan ke formulir pemesanan saat pembelian Anda, dan simpan kunci privat yang sesuai tetap berada di server.
Jika Anda lebih memilih tidak menggunakan baris perintah, Anda juga dapat membuat permintaan dengan CSR Generator online kami. Perhatikan bahwa alat ini menghasilkan kunci privat di peramban Anda, jadi simpan sendiri kunci tersebut dan pindahkan ke server Node.js.
Apa yang terjadi setelah CA menerbitkan sertifikat
Setelah CA memvalidasi CSR dan menerbitkan sertifikat, Anda biasanya akan menerima sertifikat server Anda (file .crt yang dinamai sesuai domain Anda) beserta satu atau lebih sertifikat perantara, terkadang digabungkan ke dalam file .ca-bundle. Node.js memuat ini dalam JavaScript: gabungkan sertifikat server dan sertifikat perantara menjadi satu file fullchain.crt, lalu baca dengan fs.readFileSync() dan berikan ke https.createServer():
const https = require('https');
const fs = require('fs');
const options = {
key: fs.readFileSync('/path/to/yourdomain.key'),
cert: fs.readFileSync('/path/to/fullchain.crt'),
minVersion: 'TLSv1.2'
};
https.createServer(options, (req, res) => {
res.writeHead(200);
res.end('Welcome to a Node.js HTTPS servern');
}).listen(443);
Pola fullchain tersebut adalah yang digunakan oleh sebagian besar konfigurasi produksi. Panduan lengkapnya (termasuk contoh ES modules, pendekatan alternatif dengan array ca:, dan contoh Express) dibahas dalam tutorial instalasi SSL Node.js kami.
Catatan tentang penerapan produksi. Pada tahun 2026, sebagian besar aplikasi Node.js yang menangani lalu lintas publik berjalan di belakang reverse proxy atau load balancer cloud (NGINX, HAProxy, Caddy, AWS ALB, Cloudflare, Fastly) yang mengakhiri TLS di sisi edge dan meneruskan HTTP biasa atau HTTP/2 ke Node pada port lokal berkapasitas tinggi. Dalam pola tersebut, sertifikat (dan CSR yang Anda buat di atas) berada di proxy atau load balancer, bukan di proses Node itu sendiri. Membiarkan Node.js mengakhiri TLS secara langsung sepenuhnya cocok untuk pengembangan, layanan internal, dan penerapan kecil; untuk aplikasi produksi publik, mengakhiri TLS di edge adalah pola yang lebih umum digunakan.
Hemat 10% untuk Sertifikat SSL saat memesan hari ini!
Penerbitan cepat, enkripsi kuat, kepercayaan peramban 99,99%, dukungan khusus, dan jaminan uang kembali 25 hari. Kode kupon: SAVE10

