Praktik langsung dengan OpenSSL: membuat key pair RSA dan EC memakai genpkey, menghasilkan CSR dengan req, menerbitkan self-signed certificate dengan x509, mengekstrak kunci publik, serta mengenal provider default dan legacy.

Di episode 2 kalian sudah memahami arsitektur PKI: sertifikat, CSR, chain of trust, dan hierarki CA. Sekarang waktunya mengotori tangan — kita akan menggunakan OpenSSL untuk membuat kunci, CSR, dan sertifikat sendiri. Semua praktik di episode ini adalah fondasi untuk membangun private CA di episode 4.
Roadmap episode ini: mengenal versi OpenSSL dan konsep provider, membuat key pair RSA dan EC, menghasilkan CSR, menerbitkan self-signed certificate, mengekstrak kunci publik, dan memeriksa fingerprint. Di akhir episode kalian akan nyaman memakai tiga perintah inti: openssl genpkey, openssl req, dan openssl x509.
Pada April 2026, OpenSSL 4.0 dirilis sebagai versi terbaru dengan berbagai pembaruan API dan default yang lebih aman. Bagi yang mengutamakan stabilitas production, cabang 3.5 LTS adalah pilihan yang paling banyak direkomendasikan karena mendapat dukungan jangka panjang. Keduanya menggunakan sintaks yang sama untuk kebutuhan kita di series ini.
openssl version -aPerintah di atas menampilkan nomor versi dan detail build. Perhatikan baris OPENSSLDIR; direktori ini berisi konfigurasi default dan CA certificate yang dipakai sistem.
OpenSSL 3.x ke atas memperkenalkan konsep provider: modul yang menyediakan algoritma kriptografi. Provider default menyediakan algoritma modern seperti RSA, EC, AES, dan SHA. Provider legacy diperlukan untuk algoritma lama seperti MD2 atau beberapa mode DES tertentu yang jarang dipakai.
Untuk kebutuhan kita, provider default sudah cukup. Hindari memakai algoritma legacy kecuali benar-benar diperlukan, karena umumnya lebih lemah dan berisiko. Kalian bisa melihat daftar command yang tersedia dengan openssl list -commands.
Key pair dibuat dengan genpkey. Untuk RSA, kalian menentukan panjang kunci; 2048 bit adalah minimum standar, dan 4096 bit untuk kebutuhan yang lebih tinggi. Untuk EC, kalian menentukan kurva yang dipakai, misalnya prime256v1 (P-256) atau secp384r1 (P-384):
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 \
-out root-ca/private/ca.key.pem
chmod 600 root-ca/private/ca.key.pemKesalahan umum: menulis kunci privat dengan mode 0644 sehingga bisa dibaca semua user. Kunci privat harus selalu dijaga dengan permission 0600, artinya hanya pemiliknya yang bisa membaca dan menulis. chmod 600 adalah kebiasaan yang harus melekat sepanjang series ini.
Setelah key pair siap, langkah berikutnya membuat CSR dengan openssl req. CSR berisi kunci publik dan identitas yang kita inginkan, ditandatangani dengan kunci privat:
openssl req -new -key root-ca/private/ca.key.pem \
-subj "/CN=server.lab.example.test" \
-addext "subjectAltName=DNS:server.lab.example.test,DNS:lab.example.test" \
-out leaf/server.csr.pemPerhatikan -addext yang menyisipkan SAN langsung saat pembuatan CSR. SAN sangat penting karena browser modern menolak sertifikat tanpa SAN yang cocok. Periksa isi CSR sebelum mengirim ke CA:
openssl req -in leaf/server.csr.pem -noout -textOutput menampilkan subject, kunci publik, dan ekstensi yang diminta. Jika ada kesalahan di tahap ini, buat ulang CSR; jangan menandatangani CSR yang identitasnya salah.
Self-signed certificate ditandatangani oleh kunci privatnya sendiri. Cocok untuk pengujian lokal, tetapi bukan untuk identitas publik. Buat dengan openssl x509 dalam mode request:
openssl x509 -req -in leaf/server.csr.pem \
-signkey root-ca/private/ca.key.pem \
-days 365 \
-copy_extensions copy \
-out leaf/server.cert.pemOpsi -copy_extensions copy menyalin ekstensi SAN dari CSR ke sertifikat akhir, sehingga hasilnya memiliki SAN yang sama. Tanpa opsi ini, sertifikat terbit tanpa SAN dan akan ditolak browser. Untuk memeriksa hasil, openssl x509 -in leaf/server.cert.pem -noout -text menampilkan seluruh detail termasuk SAN dan signature.
Dua operasi inspeksi yang sering dipakai: mengekstrak kunci publik dari kunci privat, dan menghitung fingerprint sertifikat untuk identifikasi cepat:
openssl pkey -in root-ca/private/ca.key.pem -pubout -out ca.pub.pem
openssl x509 -in leaf/server.cert.pem -noout -fingerprint -sha256Kunci publik hasil ekstraksi bisa dibagikan tanpa risiko. Fingerprint adalah nilai hash pendek yang unik untuk sebuah sertifikat; kalian bisa membandingkannya antar salinan untuk memastikan dua file sebenarnya sertifikat yang sama.
Selain memeriksa sertifikat, kalian juga perlu memeriksa kunci privat dan memastikan CSR cocok dengan kunci yang dipakai:
openssl pkey -in root-ca/private/ca.key.pem -noout -textOutput menampilkan algoritma, panjang kunci, dan parameter kurva. Periksa bahwa nilainya sesuai harapan; misalnya kunci EC harus menampilkan kurva P-256 atau P-384.
Untuk memastikan kunci publik di dalam CSR cocok dengan kunci privat yang dimiliki, ekstrak keduanya lalu bandingkan:
openssl pkey -in root-ca/private/ca.key.pem -pubout -out pub-from-key.pem
openssl req -in leaf/server.csr.pem -pubkey -noout -out pub-from-csr.pem
diff pub-from-key.pem pub-from-csr.pemJika diff tidak mengeluarkan output apa pun, kedua kunci publik identik dan CSR dibuat dari kunci yang benar. Kalau berbeda, berarti CSR ditandatangani oleh kunci lain; jangan lanjutkan sebelum memperbaiki pasangan kunci dan CSR.
Di episode 3 kalian sudah berlatih inti OpenSSL: membuat key pair RSA dan EC dengan genpkey, menghasilkan CSR dengan req, menerbitkan self-signed certificate dengan x509, serta mengekstrak kunci publik dan fingerprint. Semua perintah ini akan dipakai berulang kali saat membangun private CA.
Inti yang harus dibawa pulang:
Di episode 4 selanjutnya kita akan membangun private CA dua tingkat — Root CA offline dan Intermediate CA online — lengkap dengan konfigurasi openssl.cnf dan alur penandatanganan CSR yang benar. Siapkan folder lab kalian!