Tutorial Setup SSH Certificate Authority Internal Pakai Step-CA di VPS
Poin Kunci Artikel Ini:
- Pengguna (client) melakukan otentikasi awal ke server Step-CA menggunakan identitas terverifikasi (misalnya via Single Sign-On / OIDC).
- Saat pengguna melakukan koneksi SSH ke target VPS, sertifikat tersebut dikirimkan bersama request handshake.
- Satu VPS dedicated dengan OS Ubuntu 22.04 LTS atau Debian 12 (minimal 1 vCPU, 1 GB RAM).
Risiko Manajemen Public Key SSH Manual dan Solusi SSH Certificate
Manajemen akses SSH tradisional berbasis kunci publik statis mengandalkan pendaftaran manual public key setiap pengguna ke dalam file ~/.ssh/authorized_keys pada target server. Pendekatan ini dapat diterima pada skala infrastruktur kecil dengan jumlah pengembang terbatas. Namun, seiring tumbuhnya jumlah server VPS, microservice, dan anggota tim engineering, metode manual ini dengan cepat berkembang menjadi sumber kerentanan keamanan yang kritis.
Masalah Utama Authorized_Keys Tradisional
- Key Sprawl dan Hilangnya Visibilitas: Public key tersebar di puluhan hingga ratusan server tanpa ada pencatatan terpusat. Tim infrastruktur kehilangan visibilitas mengenai kunci siapa saja yang terpasang pada instance tertentu.
- Orphaned Keys (Kunci Yatim Piatu): Ketika staf atau kontraktor mengundurkan diri, menghapus public key mereka secara manual dari seluruh server target hampir selalu menyisakan celah. Kunci yang tertinggal menjadi pintu belakang yang dapat dieksploitasi.
- Ketiadaan Batas Waktu Masa Berlaku (No Expiration): Kunci SSH standar tidak memiliki fitur tanggal kadaluarsa bawaan. Sekali public key ditambahkan ke file
authorized_keys, kunci tersebut berlaku selamanya hingga seseorang menghapusnya secara manual. - Risiko Kebocoran Private Key Client: Jika perangkat laptop milik staf diretas atau dicuri, private key yang tersimpan tanpa enkripsi passphrase kuat memberikan akses tanpa batas ke seluruh infrastruktur VPS yang mempercayai public key tersebut.
- Rotasi Kunci yang Sulit dan Jarang Dilakukan: Prosedur rotasi kunci berkala secara praktis jarang dieksekusi karena kompleksitas koordinasi dan risiko terputusnya akses operasional.
Mekanisme Kerja SSH Certificate Authority
SSH Certificate Authority (CA) mengubah fondasi autentikasi dari otorisasi berbasis kunci individual menjadi otorisasi berbasis sertifikat terenkripsi. Dalam arsitektur SSH CA, server target tidak perlu lagi menyimpan ratusan public key milik masing-masing pengguna. Sebagai gantinya, server target hanya perlu mempercayai satu kunci publik milik Certificate Authority (CA) internal.
Proses autentikasi berlangsung secara dinamis melalui langkah-langkah berikut:
- Pengguna (client) melakukan otentikasi awal ke server Step-CA menggunakan identitas terverifikasi (misalnya via Single Sign-On / OIDC).
- Step-CA menerbitkan sertifikat SSH berumur singkat (ephemeral SSH certificate, misalnya berlaku 8 hingga 16 jam) yang ditandatangani oleh private key milik CA. Sertifikat ini memuat informasi identitas pengguna (Key ID), daftar server/user yang boleh diakses (Principals), dan batas waktu berlaku (Validity Window).
- Saat pengguna melakukan koneksi SSH ke target VPS, sertifikat tersebut dikirimkan bersama request handshake.
- Daemon OpenSSH server (
sshd) memverifikasi tanda tangan kriptografis sertifikat menggunakan public key CA yang disimpan diTrustedUserCAKeyssecara lokal tanpa memerlukan panggilan API langsung ke server CA saat koneksi berlangsung.
Instalasi dan Konfigurasi Step-CA di VPS
Step-CA adalah open-source Certificate Authority buatan Smallstep yang dirancang ringan, aman, dan mendukung penuh penerbitan sertifikat X.509 serta SSH. Implementasi Step-CA sebagai CA internal membutuhkan satu server dedicated VPS dengan hardening tingkat tinggi.
Prasyarat System
- Satu VPS dedicated dengan OS Ubuntu 22.04 LTS atau Debian 12 (minimal 1 vCPU, 1 GB RAM).
- Fully Qualified Domain Name (FQDN) internal atau publik yang mengarah ke IP VPS CA (contoh:
ca.internal.net). - Hak akses
rootatau pengguna dengan izinsudo. - Firewall VPS terkonfigurasi membatasi port 443 hanya untuk IP internal atau jaringan VPN.
Step 1: Install CLI Tool step dan step-ca Daemon
Unduh dan instal paket biner resmi untuk step CLI dan step-ca daemon pada VPS CA:
# Download installer step CLI
wget https://dl.step.sm/gh-release/cli/gh-release-header/v0.24.4/step_linux_0.24.4_amd64.deb
sudo dpkg -i step_linux_0.24.4_amd64.deb
# Download installer step-ca daemon
wget https://dl.step.sm/gh-release/step-ca/gh-release-header/v0.24.2/step-ca_linux_0.24.2_amd64.deb
sudo dpkg -i step-ca_linux_0.24.2_amd64.debVerifikasi instalasi dengan memeriksa versi masing-masing binary:
step version
step-ca versionStep 2: Inisialisasi CA Internal
Jalankan perintah inisialisasi interaktif untuk membuat pasangan kunci Root CA, Intermediate CA, serta struktur konfigurasi dasar:
step ca init \
--deployment-type=standalone \
--name="Internal-Infrastructure-CA" \
--dns="ca.internal.net" \
--address=":443" \
--provisioner="admin@internal.net" \
--sshSaat proses inisialisasi berjalan, sistem akan meminta Anda memasukkan passphrase untuk mengunci private key Root CA dan provisioner. Simpan passphrase ini di password manager terenkripsi. Opsi --ssh sangat penting karena memberi instruksi pada Step-CA untuk menggenerasi pasangan kunci penandatangan sertifikat SSH (User CA dan Host CA).
Step 3: Konfigurasi Service Systemd untuk Step-CA
Untuk memastikan daemon berjalan secara aman sebagai latar belakang dan otomatis aktif saat reboot, jalankan isolation privilege dengan dedicated system user:
sudo useradd --system --home /etc/step-ca --shell /bin/false step
sudo mv ~/.step /etc/step-ca/
sudo chown -R step:step /etc/step-caSimpan password provisioner ke dalam file terproteksi agar systemd dapat menjalankan service tanpa prompt manual saat boot:
echo "PASSWORD_PROVISIONER_ANDA" | sudo tee /etc/step-ca/password.txt
sudo chmod 600 /etc/step-ca/password.txt
sudo chown step:step /etc/step-ca/password.txtBuat unit file systemd pada direktori /etc/systemd/system/step-ca.service:
[Unit]
Description=Smallstep CA Service
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
User=step
Group=step
WorkingDirectory=/etc/step-ca
ExecStart=/usr/bin/step-ca /etc/step-ca/config/ca.json --password-file=/etc/step-ca/password.txt
Restart=always
RestartSec=1
LimitNOFILE=65536
[Install]
WantedBy=multi-user.targetMuat ulang daemon systemd, aktifkan service, dan pastikan status service dalam kondisi aktif (running):
sudo systemctl daemon-reload
sudo systemctl enable --now step-ca
sudo systemctl status step-caIssue Sertifikat SSH Client
Bootstrap Client Machine
Setiap komputer pengembang atau mesin klien yang ingin meminta sertifikat harus menginstal step CLI dan meletakkan Root CA fingerprint dari Step-CA agar komunikasi TLS aman. Lakukan bootstrap dengan perintah berikut:
step ca bootstrap --ca-url https://ca.internal.net --fingerprint FINGERPRINT_SHA256_ROOT_CAString fingerprint SHA256 dapat diperoleh dari server Step-CA saat proses inisialisasi awal atau dengan menginspeksi file root_ca.crt.
Request Sertifikat SSH Ephemeral
Untuk meminta sertifikat SSH yang berlaku singkat (misalnya 8 jam untuk durasi kerja harian), jalankan perintah step ssh login:
step ssh login dev-user --provisioner admin@internal.net --validity 8hPerintah ini secara otomatis menggenerasi keypair SSH sementara di lokal klien, mengirimkan public key ke Step-CA untuk ditandatangani, lalu menyimpan sertifikat hasilnya (id_ecdsa-cert.pub) bersama kunci privat (id_ecdsa) di folder ~/.ssh/.
Anda dapat menginspeksi isi dan validitas sertifikat SSH yang didapatkan menggunakan perintah ssh-keygen:
ssh-keygen -Lf ~/.ssh/id_ecdsa-cert.pubOutput akan menampilkan detail penting seperti:
- Type: ecdsa-sha2-nistp256-cert-v01@openssh.com user certificate
- Key ID: dev-user (identitas unik pemilik)
- Valid: from 2026-03-30T08:00:00 to 2026-03-30T16:00:00 (durasi 8 jam)
- Principals: dev-user, ubuntu (daftar user target yang diizinkan)
Integrasi OpenSSH Server dan Otomatisasi
Agar server target VPS menerima sertifikat SSH yang diterbitkan oleh Step-CA, kita perlu mengonfigurasi OpenSSH daemon (sshd) agar percaya pada public key milik CA.
Step 1: Export Public Key CA ke Target Server
Ambil public key SSH CA dari server Step-CA dan salin file tersebut ke target server di lokasi aman seperti /etc/ssh/ssh_user_key_ca.pub:
step ca ssh config --root | grep -v "cert-authority" > /etc/ssh/ssh_user_key_ca.pubPastikan file tersebut memiliki hak akses yang benar (chmod 644):
sudo chmod 644 /etc/ssh/ssh_user_key_ca.pub
sudo chown root:root /etc/ssh/ssh_user_key_ca.pubStep 2: Edit Konfigurasi OpenSSH Daemon (sshd_config)
Buka file konfigurasi SSH daemon pada target server di /etc/ssh/sshd_config dan tambahkan arahan berikut:
# Trust SSH CA
TrustedUserCAKeys /etc/ssh/ssh_user_key_ca.pub
# Principals Matching (Opsional - pembatasan user berbasis file)
AuthorizedPrincipalsFile /etc/ssh/auth_principals/%uJika menggunakan fitur AuthorizedPrincipalsFile, buat file pemetaan principal untuk menentukan siapa saja yang boleh masuk ke sistem sebagai user tertentu (misalnya user ubuntu):
sudo mkdir -p /etc/ssh/auth_principals
echo "dev-user" | sudo tee /etc/ssh/auth_principals/ubuntu
echo "admin-user" | sudo tee -a /etc/ssh/auth_principals/ubuntuUji validitas sintaks konfigurasi OpenSSH sebelum memuat ulang service:
sudo sshd -t
sudo systemctl restart sshdOtomatisasi Certificate Renewal
Karena sertifikat SSH berumur pendek, pengembang dapat menyegarkan sertifikat secara otomatis sebelum masa berlaku habis menggunakan step ssh renew atau mengonfigurasi ssh-agent integrasi:
step ssh renew --forceProsedur ini dapat diintegrasikan dengan script otomatisasi login harian atau cron job lokal pada perangkat pengembang.
Audit Logging dan Tracking Akses
Manfaat besar dari SSH Certificate Authority adalah transparansi jejak audit. Saat pengembang melakukan koneksi SSH menggunakan sertifikat ephemeral, OpenSSH daemon mencatat informasi lengkap penandatangan sertifikat ke log sistem (/var/log/auth.log pada Ubuntu/Debian atau via journalctl):
sudo journalctl -u ssh | grep "Accepted publickey"Contoh catatan log autentikasi yang tercatat:
Accepted publickey for ubuntu from 192.168.1.50 port 54321 ssh2: ECDSA-CERT SHA256:abc123... ID dev-user (serial 482910482901) CA ECDSA SHA256:xyz789...Log ini memberikan kepastian hukum dan teknis: siapa pengaksesnya (Key ID: dev-user), nomor seri sertifikat unik (serial 482910482901), serta CA mana yang menandatanganinya. Hal ini memudahkan analisis forensic jika terjadi insiden keamanan.
Checklist Implementasi dan Rekomendasi Zero-Trust SSH
Checklist Keamanan Deployment
Sebelum menerapkan arsitektur SSH CA ke lingkungan produksi, gunakan tabel checklist hardening berikut:
| Komponen | Tindakan Hardening | Status |
|---|---|---|
| Step-CA Server | Batasi port 443 hanya via VPN/Private Network dan aktifkan UFW firewall | Wajib |
| Root CA Key | Encrypt dengan passphrase kuat / simpan di Hardware Security Module (HSM) atau KMS | Wajib |
| Client Certificate TTL | Set masa berlaku maksimal 8-16 jam (ephemeral token) | Wajib |
| SSHD Target Host | Nonaktifkan PasswordAuthentication dan hapus file authorized_keys lama | Rekomendasi |
| Audit Log | Forward log /var/log/auth.log ke sistem SIEM terpusat (Elasticsearch/Loki) | Rekomendasi |
Arsitektur SSH Zero-Trust Ideal
Untuk mencapai postur keamanan Zero-Trust yang matang, integrasikan Step-CA dengan Identity Provider (IdP) berbasis OpenID Connect (OIDC) seperti Keycloak, Okta, Google Workspace, atau Azure AD. Melalui arsitektur ini, alur autentikasi berkembang menjadi:
- Pengembang menjalankan perintah
step ssh login. - Browser terbuka secara otomatis meminta login Single Sign-On (SSO) dan tantangan Multi-Factor Authentication (MFA).
- Setelah SSO/MFA berhasil dipenuhi, IdP menerbitkan OIDC token terverifikasi ke Step-CA.
- Step-CA memvalidasi token tersebut lalu menerbitkan sertifikat SSH ephemeral berdurasi 8 jam.
Kombinasi sertifikat SSH ephemeral dan integrasi SSO + MFA sepenuhnya menghilangkan risiko kejahatan berbasis pencurian kredensial statis, mempermudah manajemen revokasi akses saat karyawan offboarding, serta memenuhi standar kepatuhan regulasi keamanan cyber modern.


