Let’s Encrypt #
Let’s Encrypt adalah Certificate Authority gratis, otomatis, dan terbuka yang dijalankan oleh Internet Security Research Group (ISRG). Mereka menerbitkan sertifikat SSL yang dipercaya semua browser modern — tanpa biaya, tanpa perlu mengisi formulir, dan prosesnya bisa diotomatiskan sepenuhnya.
Certbot adalah client resmi yang paling populer untuk berinteraksi dengan Let’s Encrypt. Ia bisa secara otomatis mendapatkan sertifikat, mengkonfigurasi Nginx, dan memperbarui sertifikat sebelum expired.
Instalasi Certbot #
# Ubuntu 22.04 / Debian 12
sudo apt update
sudo apt install certbot python3-certbot-nginx -y
# CentOS / RHEL / Rocky Linux
sudo dnf install epel-release -y
sudo dnf install certbot python3-certbot-nginx -y
Mendapatkan Sertifikat dan Konfigurasi Nginx Otomatis #
Certbot dengan plugin Nginx bisa sekaligus mendapatkan sertifikat dan memodifikasi konfigurasi Nginx:
# Pastikan Nginx sudah berjalan dan server_name sudah dikonfigurasi
# Domain harus sudah pointing ke IP server ini
sudo certbot --nginx -d example.com -d www.example.com
Certbot akan:
- Memverifikasi kepemilikan domain (dengan membuat file sementara di server)
- Mendapatkan sertifikat dari Let’s Encrypt
- Memodifikasi konfigurasi Nginx untuk menggunakan sertifikat
- Mengkonfigurasi redirect HTTP → HTTPS
Kamu akan ditanya email untuk notifikasi expiry dan persetujuan ToS.
Mendapatkan Sertifikat Saja (Tanpa Modifikasi Nginx Otomatis) #
Kadang lebih baik mendapatkan sertifikat dulu lalu mengkonfigurasi Nginx manual:
# Gunakan webroot method — Certbot perlu bisa tulis ke direktori webroot
sudo certbot certonly --webroot \
-w /var/www/html \
-d example.com \
-d www.example.com
# Atau gunakan standalone method — Certbot sementara bind port 80
# (Nginx harus dimatikan dulu atau port 80 harus bebas)
sudo certbot certonly --standalone \
-d example.com \
-d www.example.com
Sertifikat akan disimpan di /etc/letsencrypt/live/example.com/:
/etc/letsencrypt/live/example.com/
├── cert.pem → Sertifikat server saja
├── chain.pem → Chain CA (intermediate certificates)
├── fullchain.pem → cert.pem + chain.pem (gunakan ini untuk Nginx)
└── privkey.pem → Private key
Selalu gunakan fullchain.pem untuk ssl_certificate, bukan cert.pem saja. Tanpa chain, browser yang tidak menyimpan cache intermediate CA akan menampilkan error.
Konfigurasi Nginx Manual dengan Sertifikat Let’s Encrypt #
# Redirect HTTP ke HTTPS
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
# HTTPS server
server {
listen 443 ssl;
server_name example.com www.example.com;
# Sertifikat dari Let's Encrypt
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# Parameter SSL yang direkomendasikan (lihat artikel ssl-config)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
root /var/www/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Pembaruan Otomatis #
Sertifikat Let’s Encrypt berlaku selama 90 hari. Certbot menginstal timer systemd (atau cron job) secara otomatis untuk memperbarui sertifikat yang akan expired dalam 30 hari ke depan:
# Cek apakah timer systemd sudah aktif
sudo systemctl status certbot.timer
# Test proses renewal tanpa benar-benar memperbarui
sudo certbot renew --dry-run
# Lihat semua sertifikat dan tanggal expiry-nya
sudo certbot certificates
Proses renewal otomatis berjalan dua kali sehari. Certbot juga otomatis me-reload Nginx setelah memperbarui sertifikat.
Wildcard Certificate #
Sertifikat wildcard (*.example.com) mencakup semua subdomain. Berguna jika kamu punya banyak subdomain yang berubah-ubah.
Wildcard membutuhkan DNS challenge (bukan HTTP challenge) karena Let’s Encrypt perlu memverifikasi kontrol atas seluruh domain:
# Minta wildcard certificate menggunakan DNS challenge manual
sudo certbot certonly --manual --preferred-challenges dns \
-d example.com -d "*.example.com"
# Certbot akan memberikan instruksi untuk menambahkan TXT record ke DNS:
# Tambahkan TXT record: _acme-challenge.example.com = "nilai_yang_diberikan"
# Tunggu propagasi DNS, lalu tekan Enter
Untuk wildcard otomatis tanpa intervensi manual, kamu butuh DNS provider yang mendukung API dan plugin Certbot yang sesuai (misalnya python3-certbot-dns-cloudflare untuk Cloudflare):
# Contoh dengan Cloudflare
sudo apt install python3-certbot-dns-cloudflare
# Buat file credentials
sudo nano /etc/letsencrypt/cloudflare.ini
# dns_cloudflare_api_token = YOUR_API_TOKEN
sudo chmod 600 /etc/letsencrypt/cloudflare.ini
# Minta wildcard certificate otomatis
sudo certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \
-d example.com \
-d "*.example.com"
Masalah Umum #
Rate limit: Let’s Encrypt membatasi 50 sertifikat per domain per minggu. Saat testing, gunakan staging environment:
# Gunakan staging (sertifikat tidak dipercaya browser, tapi tidak kena rate limit)
sudo certbot --nginx --staging -d example.com
Domain belum pointing ke server: Certbot gagal jika domain belum resolve ke IP server. Verifikasi dulu:
dig +short example.com # Harus mengembalikan IP server
curl http://example.com # Harus bisa diakses dari internet
Port 80 terblokir: HTTP challenge butuh port 80 terbuka dari internet. Jika di balik firewall, gunakan DNS challenge.
Ringkasan #
certbot --nginx -d domain.comadalah cara termudah — mendapatkan sertifikat sekaligus konfigurasi Nginx otomatis.- Selalu gunakan
fullchain.pemuntukssl_certificate, bukancert.pemsaja.- Sertifikat berlaku 90 hari — Certbot menginstal timer untuk renewal otomatis, test dengan
certbot renew --dry-run.- Wildcard certificate membutuhkan DNS challenge — bisa diotomatisasi dengan plugin DNS provider seperti Cloudflare.
- Gunakan
--stagingsaat testing untuk menghindari rate limit.
← Sebelumnya: Self-Signed Certificate Berikutnya: Optimasi Konfigurasi SSL →