Mengamankan komunikasi NetBSD dengan TLS: membangkitkan key dan CSR dengan OpenSSL, membuat sertifikat self-signed, mengelola trust dengan ca-certificates, serta otomasi sertifikat Let's Encrypt.

Di episode 13 sebelumnya kita telah mengamankan gerbang administrasi dengan SSH berbasis key. Namun banyak layanan lain — web, email, API — berbicara dengan protokol yang berbeda, dan membutuhkan lapisan keamanan yang berbeda pula: TLS. Pada episode ini kita akan membedah TLS, OpenSSL, dan sertifikat di NetBSD — membangkitkan key dan CSR, membuat sertifikat self-signed, mengelola trust dengan ca-certificates, serta mengotomasi sertifikat Let's Encrypt.
| Istilah | Penjelasan |
|---|---|
| TLS | Protokol yang mengenkripsi komunikasi (penerus SSL) |
| Sertifikat | Dokumen digital berisi identitas + kunci publik |
| Key | Kunci privat rahasia milik server |
| CSR | Permintaan penandatanganan sertifikat |
| CA | Otoritas yang menandatangani sertifikat |
| Chain of trust | Rantai kepercayaan dari CA ke sertifikat |
Alurnya: server membangkitkan key privat, membuat CSR berisi identitas, lalu CSR ditandatangani menjadi sertifikat — baik oleh CA publik (Let's Encrypt) atau oleh diri sendiri (self-signed).
OpenSSL tersedia di base system NetBSD. Verifikasi versinya:
openssl versionOpenSSL 3.4.1 6 Jun 2026Untuk sebuah website web.example.com, bangkitkan key RSA 3072 dan CSR sekaligus:
openssl req -new -newkey rsa:3072 -nodes \
-keyout web.key -out web.csr \
-subj "/CN=web.example.com"Generating a RSA private key
...
writing new private key to 'web.key'Dua file dihasilkan: web.key (privat, rahasia) dan web.csr (permintaan, publik). Kirim CSR ke CA untuk ditandatangani, atau tandatangani sendiri.
Warning
-nodes berarti key tidak dienkripsi dengan passphrase — nyaman untuk daemon yang harus start otomatis, tetapi berarti siapa pun yang menguasai file web.key menguasai identitasnya. Simpan di lokasi yang dilindungi, misalnya /etc/openssl/private dengan mode 600.
Untuk testing internal, buat sertifikat yang ditandatangani sendiri dengan masa berlaku 365 hari:
openssl req -x509 -newkey rsa:3072 -nodes \
-keyout web.key -out web.crt -days 365 \
-subj "/CN=web.example.com"Generating a RSA private key
...Cek isi sertifikat:
openssl x509 -in web.crt -text -nooutCertificate:
Data:
Version: 3 (0x2)
Serial Number: ...
Subject: CN=web.example.com
Not Before: Aug 3 12:00:00 2026 GMT
Not After : Aug 3 12:00:00 2027 GMT
Public Key Algorithm: rsaEncryption
...Perhatikan masa berlaku (Not Before/Not After) — bagian pertama yang diperiksa ketika troubleshooting "certificate expired".
Verifikasi sertifikat terhadap chain dan key:
openssl verify -CAfile ca.crt web.crtweb.crt: OKVerifikasi bahwa key cocok dengan sertifikat (modulus keduanya harus sama):
openssl pkey -in web.key -pubout -outform DER | sha256
openssl x509 -in web.crt -pubkey -noout -outform DER | sha256Untuk aplikasi memercayai CA publik (misalnya saat memanggil API HTTPS), daftar CA harus ada. NetBSD menyediakan package ca-certificates:
cd /usr/pkgsrc/security/mozilla-rootcerts
make installExtracting certificates from Mozilla's NSS
Creating /etc/openssl/certs/ca-certificates.crtSertifikat CA yang dikumpulkan ditaruh di /etc/openssl/certs/ca-certificates.crt — file inilah yang dipakai aplikasi (via SSL_CERT_FILE) untuk memverifikasi koneksi keluar.
Untuk CA internal (misalnya CA perusahaan), tambahkan ke store trust:
cp internal-ca.crt /etc/openssl/certs/
rehash /etc/openssl/certs/etc/openssl/certs/internal-ca.crt -> internal-ca.crtSertifikat self-signed tidak dipercaya browser publik. Untuk layanan yang diakses publik, gunakan Let's Encrypt — CA gratis yang menerbitkan sertifikat 90 hari dan bisa diperbarui otomatis. NetBSD menyediakan acme-client (tool asli BSD) dan acme.sh.
Install dari pkgsrc:
cd /usr/pkgsrc/security/acme-client
make install cleanKonfigurasi ada di /usr/pkg/etc/acme-client.conf:
authority letsencrypt {
api url "https://acme-v02.api.letsencrypt.org/directory"
account key "/etc/ssl/account.key"
}
domain web.example.com {
domain key "/etc/ssl/private/web.key"
domain certificate "/etc/ssl/web.crt"
domain full chain "/etc/ssl/web-fullchain.pem"
challenge "/var/www/htdocs/web"
}Terbitkan sertifikat pertama:
acme-client -v web.example.comacme-client: web.example.com: certificate signedSertifikat Let's Encrypt berlaku 90 hari. Perbarui otomatis lewat cron — misalnya setiap hari pukul 03:00, dan muat ulang service web:
0 3 * * * acme-client web.example.com && service nginx reload| Aturan | Alasan |
|---|---|
| Key 3072-bit atau lebih | RSA 2048 mulai dianggap lemah |
| Masa berlaku self-signed singkat | Kurangi risiko sertifikat bocor dipakai lama |
Perlindungan web.key ketat (mode 600) | Key privat = identitas server |
| Auto-renewal Let's Encrypt | Hilangkan pekerjaan manual dan risiko expire |
Gunakan ca-certificates untuk trust | Verifikasi keluar berjalan benar |
Pada episode 14 ini, kalian telah mengamankan komunikasi NetBSD dengan TLS: membangkitkan key dan CSR dengan OpenSSL, membuat dan memverifikasi sertifikat self-signed, mengelola trust dengan ca-certificates, serta mengotomasi penerbitan sertifikat Let's Encrypt dengan acme-client.
Inti yang harus dibawa pulang:
openssl req -x509 untuk self-signed, openssl verify dan pencocokan modulus untuk verifikasi.ca-certificates → /etc/openssl/certs/ca-certificates.crt.acme-client + cron renewal.Di episode 15 selanjutnya kita akan memperkuat sistem dari dalam: security features dan PaX — mengaktifkan ASLR dan W^X, mengelola flags per-binary dengan paxctl, serta menerapkan best practice keamanan server dengan sysctl. Sampai jumpa di episode 15!