Membangun private CA dua tingkat: Root CA offline yang dijaga ketat, Intermediate CA online untuk penerbitan, konfigurasi openssl.cnf, struktur index dan serial, serta praktik penandatanganan CSR dengan ekstensi serverAuth dan SAN.

Di episode 3 kalian sudah menguasai pembuatan key, CSR, dan self-signed certificate. Sekarang saatnya naik level: membangun private CA yang mampu menerbitkan sertifikat untuk mesin dan service di lingkungan kalian sendiri.
Roadmap episode ini: merancang hierarki CA dua tingkat dengan Root CA offline dan Intermediate CA online, menyiapkan struktur direktori CA, menulis konfigurasi openssl.cnf, menandatangani CSR, dan menerapkan praktik terbaik seperti key escrow serta manajemen masa berlaku. Di akhir episode kalian akan memiliki CA yang siap menerbitkan sertifikat.
Root CA adalah otoritas tertinggi yang menandatangani dirinya sendiri. Karena seluruh rantai kepercayaan berakar di sini, kunci privatnya harus dijaga paling ketat: offline dan air-gapped, artinya tidak pernah terhubung jaringan. Root dipakai hanya saat menerbitkan intermediate atau menandatangani CRL.
Cara praktis menjaga root offline: simpan di komputer yang tidak terhubung internet, simpan backup terenkripsi di tempat aman, dan jauhkan dari akses sehari-hari. Semakin jarang kunci root menyala, semakin kecil permukaan serangannya.
Intermediate CA (Sub CA) adalah otoritas yang menandatangani sertifikat leaf setiap hari. Kunci privatnya boleh berada di server yang terhubung jaringan, tetapi tetap dijaga dengan permission ketat dan akses terbatas. Dengan pemisahan ini, kalau intermediate terbobol, root tetap aman dan bisa mencabut trust terhadap intermediate yang bermasalah.
Pemisahan root dan intermediate adalah standar praktik industri. Seluruh lab kita mengikuti pola ini: root di mesin terpisah atau folder terisolasi, intermediate di lingkungan yang lebih aktif.
CA OpenSSL tradisional membutuhkan beberapa file dan folder penanda. Siapkan struktur untuk intermediate:
mkdir -p intermediate-ca/{certs,crl,csr,newcerts,private}
touch intermediate-ca/index.txt
echo 1000 > intermediate-ca/serial
echo 1000 > intermediate-ca/crlnumber
chmod 700 intermediate-ca/privateFungsi setiap file: index.txt adalah database sertifikat yang sudah diterbitkan, serial menentukan nomor seri berikutnya, dan crlnumber untuk penomoran CRL. Semua file ini akan dikelola otomatis oleh openssl ca saat penandatanganan.
Konfigurasi CA ditulis di openssl.cnf. Contoh berikut untuk intermediate CA, lengkap dengan section CA_default, policy, dan ekstensi sertifikat:
[ ca ]
default_ca = CA_default
[ CA_default ]
dir = ./intermediate-ca
database = $dir/index.txt
new_certs_dir = $dir/newcerts
certificate = $dir/certs/intermediate.cert.pem
private_key = $dir/private/intermediate.key.pem
serial = $dir/serial
crlnumber = $dir/crlnumber
crl_dir = $dir/crl
default_md = sha256
policy = policy_loose
copy_extensions = copy
[ policy_loose ]
countryName = optional
stateOrProvinceName = optional
organizationName = optional
commonName = supplied
[ server_cert ]
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
[ client_cert ]
basicConstraints = CA:FALSE
keyUsage = digitalSignature
extendedKeyUsage = clientAuthSection [ CA_default ] menentukan lokasi semua file CA dan policy yang dipakai. Section [ policy_loose ] mengatur field CSR mana yang wajib diisi; pada contoh di atas hanya commonName yang wajib. Section [ server_cert ] dan [ client_cert ] menyimpan ekstensi untuk sertifikat server dan klien, termasuk serverAuth dan clientAuth. Baris copy_extensions = copy membuat SAN dari CSR ikut terbawa ke sertifikat.
Setelah CA siap, kita bisa menandatangani CSR. Perintah intinya:
openssl ca -config openssl.cnf -extensions server_cert \
-days 365 -notext -batch \
-in leaf/server.csr.pem \
-out leaf/server.cert.pemOpsi -extensions server_cert memakai ekstensi serverAuth dari openssl.cnf, -days 365 menentukan masa berlaku, dan -batch menjalankan tanpa interaksi. Periksa hasil penandatanganan:
openssl x509 -in leaf/server.cert.pem -noout -textPerhatikan bagian Extended Key Usage: harus memuat serverAuth, dan Subject Alternative Name harus berisi nama host yang diinginkan. Untuk identitas klien, ulangi dengan -extensions client_cert. Seluruh riwayat penerbitan tercatat otomatis di index.txt.
Key escrow adalah penyimpanan salinan kunci privat di tempat terpercaya untuk keperluan recovery. Untuk private CA, simpan backup kunci privat root dan intermediate dalam bentuk terenkripsi di media terpisah, misalnya USB yang dikunci di brankas atau secret manager. Tanpa cadangan, kehilangan kunci berarti CA harus dibangun ulang dari nol.
Buat kebiasaan menguji cadangan secara berkala dengan mencoba memulihkannya, bukan sekadar menyimpan. Cadangan yang tidak pernah diuji hanya ilusi keamanan.
Masa berlaku CA sebaiknya mengikuti peran dalam hierarki. Praktik umum:
Sertifikat pendek membatasi dampak bila kunci bocor dan menyederhanakan penghentian layanan. Biasakan mencatat tanggal kedaluwarsa setiap CA yang kalian terbitkan, misalnya dalam sebuah checklist operasional.
Di episode 4 kalian sudah membangun private CA dua tingkat: Root CA offline yang dijaga ketat, Intermediate CA online untuk penerbitan, struktur direktori dengan index dan serial, konfigurasi openssl.cnf, penandatanganan CSR dengan openssl ca, serta praktik key escrow dan manajemen masa berlaku.
Inti yang harus dibawa pulang:
Di episode 5, episode terakhir series ini, kita akan memasang root certificate ke trust store sistem, browser, dan aplikasi, lalu mendistribusikan rantai sertifikat dengan benar. Sampai jumpa di episode penutup!