Menjadikan OpenBao sebagai Root CA dan Intermediate CA internal, menerbitkan sertifikat TLS on-demand dengan TTL pendek, serta memahami peran role dalam otomatisasi penerbitan sertifikat untuk layanan internal yang berkomunikasi lewat TLS.

Di episode 5 kalian memakai Transit Secrets Engine untuk mengenkripsi dan mendekripsi data sensitif tanpa menyimpan data itu sendiri di OpenBao. Episode 6 ini bergerak selangkah lebih jauh: OpenBao tidak hanya menjaga kunci, tetapi juga menerbitkan sertifikat untuk kalian. Dengan PKI Secrets Engine, OpenBao bisa bertindak sebagai Certificate Authority (CA) internal yang mencetak sertifikat TLS secara otomatis, kapan pun dibutuhkan, dengan masa berlaku yang bisa dibuat sangat pendek. Ini fondasi dari arsitektur zero-trust dan komunikasi service-to-service yang terautentikasi.
Public Key Infrastructure (PKI) adalah sistem yang mengatur penerbitan, pendistribusian, dan pencabutan sertifikat digital. Dalam ekosistem web modern, sertifikat TLS biasanya diterbitkan oleh CA publik seperti Let's Encrypt. Namun di dalam jaringan internal, kalian sering tidak ingin setiap layanan memakai sertifikat publik — kalian butuh CA internal yang hanya dipercaya oleh mesin-mesin milik kalian sendiri.
OpenBao mampu menjalankan dua peran dalam hierarki PKI:
Pemisahan ini penting: jika intermediate terkompromi, kalian cukup mencabut sertifikat intermediate itu dan membangun yang baru — Root CA tetap aman. Inilah alasan OpenBao bisa otomatis menjadi Root CA sekaligus Intermediate CA dalam satu instalasi.
Seperti engine lain, PKI diaktifkan lewat bao secrets enable. Mount path default-nya adalah pki. Kalian juga perlu menaikkan batas TTL, karena sertifikat CA berumur sangat panjang:
bao secrets enable pki
bao secrets tune -max-lease-ttl=87600h pki
bao write pki/root/generate/internal \
common_name="OpenBao Root CA" \
ttl=87600hbao secrets enable pki mengaktifkan engine di path pki, sementara bao write pki/root/generate/internal membuat pasangan kunci root sekaligus sertifikatnya dalam satu langkah. Opsi -max-lease-ttl=87600h setara 10 tahun — durasi yang umum untuk CA root.
Menerbitkan semua sertifikat langsung dari root itu mungkin dilakukan, tetapi bukan praktik yang baik. Best practice adalah memakai intermediate. Berikut perbandingan keduanya:
| Aspek | Root CA (pki) | Intermediate CA (pki_int) |
|---|---|---|
| Sumber kunci | Generate sendiri | CSR ditandatangani Root CA |
| Pemakaian | Hampir tidak pernah langsung | Menerbitkan sertifikat layanan |
| Path penerbitan | pki/root/generate/internal | pki_int/issue/<role> |
| Risiko kompromi | Kritis, sulit dicabut | Bisa dicabut terpisah |
| TTL khas | Bertahun-tahun | Hitungan jam sampai hari |
Alur pembuatan intermediate dimulai dari mengaktifkan mount kedua:
bao secrets enable -path=pki_int pki
bao secrets tune -max-lease-ttl=43800h pki_int
bao write pki_int/intermediate/generate/internal \
common_name="OpenBao Intermediate CA" | tee /tmp/intermediate.csr.jsonCSR yang dihasilkan kemudian ditandatangani oleh root, lalu sertifikat hasilnya diimpor kembali ke pki_int. Setelah itu pki_int resmi menjadi intermediate yang siap menerbitkan sertifikat untuk layanan internal.
Agar bisa menerbitkan sertifikat, sebuah mount PKI membutuhkan role. Role mendefinisikan domain yang diizinkan, TTL maksimum, dan aturan lain yang mengatur bentuk sertifikat yang boleh lahir. Contoh role untuk domain internal:
bao write pki_int/roles/my-role \
allowed_domains="internal.local" \
allow_subdomains=true \
max_ttl="24h"Setelah role ada, menerbitkan sertifikat semudah satu perintah — tidak perlu menunggu proses manual seperti pada CA tradisional:
bao write pki_int/issue/my-role \
common_name="api.internal.local" \
ttl="24h"bao write pki_int/issue/my-role common_name="api.internal.local" menerbitkan sertifikat untuk api.internal.local yang berlaku 24 jam. Sertifikat lahir seketika lewat API, lengkap dengan kunci privatnya.
Output yang dikembalikan kurang lebih seperti ini:
{
"data": {
"certificate": "-----BEGIN CERTIFICATE----- ...",
"private_key": "-----BEGIN PRIVATE KEY----- ...",
"issuing_ca": "-----BEGIN CERTIFICATE----- ...",
"serial_number": "4f:2b:9d:...",
"expiration": 1753824000
}
}Kalian cukup menyimpan private_key dan certificate lalu memasangnya di service. Karena TTL-nya pendek, service diharapkan memperbarui sertifikatnya sendiri sebelum masa berlaku habis — pola yang dikenal sebagai certificate rotation.
Sertifikat dengan TTL pendek adalah pilar zero-trust:
Tip
Untuk sertifikat internal yang hanya dipakai antar-service, mulailah dari TTL 24 jam lalu turunkan perlahan menjadi 1 hingga 6 jam setelah rotasi otomatis berjalan lancar. Ingat, max_ttl pada role adalah batas atas — TTL saat issuance tidak boleh melampaui batas itu.
Semua sertifikat yang diterbitkan bisa dilacak dari mount pki_int:
bao list pki_int/certs
bao read pki_int/cert/4f:2b:9d:...bao list pki_int/certs menampilkan serial number semua sertifikat yang aktif, dan bao read pki_int/cert/<serial> menampilkan detail masing-masing. Ini berguna untuk audit — memastikan tidak ada sertifikat asing yang terbit tanpa sepengetahuan tim.
Pada episode 6 ini kalian menjadikan OpenBao sebagai CA internal: memahami peran Root CA dan Intermediate CA, mengaktifkan engine pki dan pki_int, membangun hierarki CA, membuat role penerbitan, serta menerbitkan sertifikat TLS on-demand dengan TTL pendek untuk api.internal.local dan layanan internal lainnya.
Inti yang harus dibawa pulang:
allowed_domains, max_ttl, dan allow_subdomains dikontrol di sini.pki_int/certs — gunakan untuk audit penerbitan.Di episode 7 berikutnya, kita berhenti sejenak dari secrets engine dan membahas Access Control Policies — bagaimana OpenBao memutuskan siapa yang boleh mengakses path mana, dalam format HCL, lengkap dengan capabilities dan pengujian penegakan privilege.