Di tahun 2026, website tanpa HTTPS tidak hanya dianggap tidak aman oleh browser — tapi juga di-penalize Google di hasil pencarian. Kabar baiknya: Anda tidak perlu bayar mahal untuk sertifikat SSL. Let’s Encrypt memberikan SSL gratis, valid, dan trusted oleh semua browser modern. Artikel ini adalah panduan lengkap install SSL di Nginx dengan auto-renewal, agar Anda tidak perlu pusing soal expiry lagi.
Saya asumsikan Anda sudah punya VPS Ubuntu dengan Nginx terinstall dan domain sudah pointing ke IP VPS. Kalau belum, setup dulu fondasinya.
1. Apa Itu SSL/TLS dan Kenapa Wajib?
SSL (Secure Sockets Layer) — sekarang disebut TLS (Transport Layer Security) — adalah enkripsi yang melindungi data antara browser user dan server Anda. Tanpa SSL, data (password, token, form) dikirim dalam teks polos yang bisa di-intercept.
Dampak Tidak Pakai SSL:
- Browser menampilkan “Not Secure” di address bar — user tidak percaya.
- Google Chrome memblokir form submission di HTTP.
- SEO ranking turun — Google prioritaskan HTTPS sejak 2014.
- Tidak bisa pakai HTTP/2 dan modern web features.
Let’s Encrypt vs SSL Berbayar:
| Fitur | Let’s Encrypt | SSL Berbayar (DigiCert, dll) |
|---|---|---|
| Harga | Gratis | Rp 200rb – 5jt/tahun |
| Validasi | Domain (DV) | Organization (OV) / Extended (EV) |
| Wildcard (*.domain) | ✅ Bisa | ✅ Bisa |
| Trust Browser | ✅ 100% | ✅ 100% |
| Masa Valid | 90 hari | 1-2 tahun |
| Auto-Renewal | ✅ Native | ⚠️ Manual/CSR |
Untuk 99% website — terutama developer, startup, dan blog — Let’s Encrypt sudah lebih dari cukup.
2. Install Certbot dan Plugin Nginx
Certbot adalah tool official dari EFF (Electronic Frontier Foundation) untuk generate dan manage Let’s Encrypt certificate.
sudo apt update
sudo apt install certbot python3-certbot-nginx -yVerifikasi install:
certbot --versionHarus muncul certbot 2.x.
3. Pastikan Nginx Server Block Sudah Benar
Certbot akan membaca konfigurasi Nginx Anda untuk tahu domain mana yang aktif. Pastikan server block sudah ada:
sudo nano /etc/nginx/sites-available/zulfianto.comMinimal:
server {
listen 80;
server_name zulfianto.com www.zulfianto.com;
root /var/www/zulfianto.com;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}Aktifkan:
sudo ln -s /etc/nginx/sites-available/zulfianto.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginxPenting: Domain harus sudah resolve ke IP VPS. Certbot akan verify kepemilikan domain via HTTP challenge (mengakses file di server Anda). Kalau domain belum pointing, Certbot akan gagal.
4. Generate SSL Certificate
Jalankan Certbot dengan plugin Nginx:
sudo certbot --nginx -d zulfianto.com -d www.zulfianto.comIkuti wizard:
<
- Masukkan email untuk notifikasi expiry dan security alert.
- Accept Terms of Service.
- Pilih apakah mau share email dengan EFF (opsional).
- Certbot akan detect server block Anda dan tanya: “Please choose whether or not to redirect HTTP traffic to HTTPS.”
Pilih:
2: Redirect - Make all requests redirect to secure HTTPS accessCertbot akan:
- Generate certificate
- Install ke Nginx
- Edit konfigurasi server block Anda untuk listen 443 + SSL
- Tambahkan redirect 80 → 443
Output sukses:
Congratulations! You have successfully enabled https://zulfianto.com and https://www.zulfianto.comTest: Buka https://zulfianto.com. Harus muncul 🔒 lock icon di browser.
5. Verifikasi Auto-Renewal
Let’s Encrypt certificate hanya valid 90 hari. Tapi jangan khawatir — Certbot sudah setup auto-renewal via systemd timer atau cron.
Cek timer:
sudo systemctl list-timers | grep certbotAtau cek cron:
sudo cat /etc/cron.d/certbotSecara default, Certbot akan coba renew setiap 12 jam. Kalau certificate sudah mendekati expiry (30 hari sebelum habis), auto-renewal akan jalan.
Test Auto-Renewal Manual (Simulasi)
sudo certbot renew --dry-runIni akan simulasi proses renew tanpa mengganti certificate aktif. Kalau output:
Congratulations, all renewals succeeded.Berarti auto-renewal Anda berfungsi sempurna. Anda bisa lupa soal SSL selamanya.
6. Struktur File SSL yang Dibuat Certbot
Certbot menyimpan certificate di:
/etc/letsencrypt/live/zulfianto.com/
├── fullchain.pem # Certificate + chain (untuk Nginx)
├── privkey.pem # Private key (rahasia!)
├── cert.pem # Certificate saja
└── chain.pem # Chain sajaNginx config yang di-edit Certbot akan terlihat seperti:
server {
listen 443 ssl;
server_name zulfianto.com;
ssl_certificate /etc/letsencrypt/live/zulfianto.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/zulfianto.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
root /var/www/zulfianto.com;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
server {
listen 80;
server_name zulfianto.com;
return 301 https://$server_name$request_uri;
}Penjelasan:
listen 443 ssl— Port HTTPS.ssl_certificate— Path ke fullchain (certificate + intermediate).ssl_certificate_key— Path ke private key.return 301— Redirect permanent HTTP ke HTTPS.
7. SSL untuk Multiple Domain (Single VPS)
Kalau Anda punya banyak domain di 1 VPS — misalnya zulfianto.com, raytekno.com, app.zulfianto.com — generate semua sekaligus:
sudo certbot --nginx -d zulfianto.com -d www.zulfianto.com -d raytekno.com -d www.raytekno.com -d app.zulfianto.comAtau tambahkan satu per satu:
sudo certbot --nginx -d app.zulfianto.comSemua certificate akan di-manage oleh Certbot yang sama. Auto-renewal akan handle semua domain.
8. Wildcard SSL (*.zulfianto.com)
Wildcard certificate mengamankan semua subdomain: api.zulfianto.com, blog.zulfianto.com, dashboard.zulfianto.com, dll.
Wildcard tidak bisa pakai HTTP challenge. Harus pakai DNS challenge (prove ownership via DNS record).
sudo certbot certonly --manual --preferred-challenges dns -d *.zulfianto.com -d zulfianto.comCertbot akan kasih instruksi tambah TXT record di DNS. Setelah propagate, tekan Enter. Certificate akan di-generate.
Catatan: Wildcard dengan manual DNS challenge tidak bisa auto-renewal otomatis (kecuali DNS provider Anda support API, seperti Cloudflare). Untuk kebanyakan kasus, generate per-domain lebih praktis.
9. Troubleshooting SSL
Error: “Could not authenticate to the ACME server”
Penyebab: Domain tidak resolve ke IP VPS, atau firewall blok port 80.
Solusi:
dig zulfianto.com +short # Cek IP domain
sudo ufw status # Cek firewall
sudo ufw allow 80/tcp # Pastikan port 80 terbukaError: “Certificate not yet due for renewal”
Penyebab: Anda coba renew padahal certificate masih baru.
Solusi: Bukan error. Certbot hanya renew kalau < 30 hari ke expiry. Test dengan --dry-run saja.
Browser Masih Bilang “Not Secure” Setelah Install
Penyebab: Mixed content (asset HTTP di halaman HTTPS), atau certificate belum propagate.
Solusi:
# Cek certificate info
openssl s_client -connect zulfianto.com:443 -servername zulfianto.com
# Cek mixed content di browser DevTools → ConsoleAuto-Renewal Gagal Setelah Beberapa Bulan
Penyebab: Nginx config berubah, atau port 80 tertutup, atau domain expired/pindah.
Solusi:
sudo certbot renew --dry-run
sudo tail -f /var/log/letsencrypt/letsencrypt.log10. Hardening SSL: A+ Rating di SSL Labs
SSL aktif belum cukup. Pastikan konfigurasi Anda aman dari vulnerabilitas:
Tambahkan di server block (biasanya sudah di-include Certbot):
# /etc/nginx/snippets/ssl-hardening.conf
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security "max-age=63072000" always;Include di server block:
include /etc/nginx/snippets/ssl-hardening.conf;Test rating di SSL Labs. Target: A+.
Kesimpulan: SSL adalah Foundation, Bukan Luxury
Dengan Let’s Encrypt + Certbot + Nginx, Anda mendapatkan:
- ✅ SSL gratis dan valid 100%
- ✅ Auto-renewal tanpa intervensi manual
- ✅ Redirect HTTP → HTTPS otomatis
- ✅ Konfigurasi A+ security rating
- ✅ Support multiple domain dan wildcard
Semua ini gratis. Semua ini otomatis. Tidak ada alasan lagi untuk tidak pakai HTTPS di 2026.
SSL dan keamanan server adalah modul wajib yang saya ajarkan secara praktis di kelas.zulfianto.com/course/belajar-server. Bukan sekadar install certbot, tapi pahami cara kerja enkripsi, cara handle mixed content, dan cara troubleshoot saat certificate bermasalah.
— Tested on Ubuntu 24.04 + Nginx 1.24 + Certbot 2.x, Mei 2026






