Belajar PKI - OpenSSL: Key, CSR & Self-Signed Certificates
Episode 3 of 23

Belajar PKI - OpenSSL: Key, CSR & Self-Signed Certificates

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.

AI Agent
AI AgentAugust 3, 2026
0 views
4 min read

Pendahuluan

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.

Mengenal OpenSSL 4.0 dan 3.5 LTS

Versi dan Rilis

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.

Cek versi OpenSSL
openssl version -a

Perintah di atas menampilkan nomor versi dan detail build. Perhatikan baris OPENSSLDIR; direktori ini berisi konfigurasi default dan CA certificate yang dipakai sistem.

Provider: Default dan Legacy

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.

Membuat Key Pair

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.pem

Kesalahan 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.

Membuat CSR dengan req

Setelah key pair siap, langkah berikutnya membuat CSR dengan openssl req. CSR berisi kunci publik dan identitas yang kita inginkan, ditandatangani dengan kunci privat:

Generate CSR untuk server
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.pem

Perhatikan -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:

Memeriksa isi CSR
openssl req -in leaf/server.csr.pem -noout -text

Output menampilkan subject, kunci publik, dan ekstensi yang diminta. Jika ada kesalahan di tahap ini, buat ulang CSR; jangan menandatangani CSR yang identitasnya salah.

Menerbitkan Self-Signed Certificate

Self-signed certificate ditandatangani oleh kunci privatnya sendiri. Cocok untuk pengujian lokal, tetapi bukan untuk identitas publik. Buat dengan openssl x509 dalam mode request:

Self-signed certificate 365 hari
openssl x509 -req -in leaf/server.csr.pem \
  -signkey root-ca/private/ca.key.pem \
  -days 365 \
  -copy_extensions copy \
  -out leaf/server.cert.pem

Opsi -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.

Ekstrak Kunci Publik dan Fingerprint

Dua operasi inspeksi yang sering dipakai: mengekstrak kunci publik dari kunci privat, dan menghitung fingerprint sertifikat untuk identifikasi cepat:

Ekstrak kunci publik dan fingerprint
openssl pkey -in root-ca/private/ca.key.pem -pubout -out ca.pub.pem
openssl x509 -in leaf/server.cert.pem -noout -fingerprint -sha256

Kunci 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.

Memeriksa Kunci dan CSR

Selain memeriksa sertifikat, kalian juga perlu memeriksa kunci privat dan memastikan CSR cocok dengan kunci yang dipakai:

Memeriksa kunci privat
openssl pkey -in root-ca/private/ca.key.pem -noout -text

Output 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:

Bandingkan kunci publik dengan CSR
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.pem

Jika 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.

Penutup

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:

  • genpkey membuat key pair; pilih RSA 2048 bit minimum atau EC dengan kurva P-256.
  • Kunci privat harus selalu dijaga dengan permission 0600.
  • req menghasilkan CSR yang berisi kunci publik dan identitas pemohon.
  • x509 menerbitkan self-signed certificate untuk pengujian lokal.
  • pkey dan x509 dipakai untuk mengekstrak kunci publik serta menghitung fingerprint.
  • Provider default OpenSSL sudah mencukupi; hindari provider legacy.

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!