Memasang HTTPS Certbot di Nginx Setelah DNS Aktif
Urutan penerbitan sertifikat yang aman: DNS, firewall, server block, Certbot, redirect, renewal, dan pemeriksaan sertifikat.
HTTPS pada Nginx sering terlihat seperti satu perintah Certbot, padahal keberhasilannya bergantung pada DNS, firewall, virtual host, dan kepemilikan domain. Pada migrasi NgodingSantai, sertifikat diminta setelah domain akar serta www benar-benar mencapai VPS. Urutan ini penting karena server juga melayani aplikasi lain.
- A dan CNAME menjawab host yang benar.
- Port TCP 80 serta 443 diizinkan pada firewall cloud dan UFW.
- Server block HTTP mempunyai
server_namedomain akar dan www. nginx -tlolos sebelum Certbot mengubah konfigurasi.
Pastikan domain mencapai server yang dimaksud
Challenge HTTP-01 memerlukan otoritas sertifikat mengakses token melalui domain. Karena itu jawaban DNS harus menunjuk ke VPS dan port 80 dapat dijangkau dari internet. Hasil curl lokal saja belum cukup; cek dari jaringan luar atau resolver publik.
Resolve-DnsName ozancicak.biz.id -Type A
Resolve-DnsName www.ozancicak.biz.id
curl.exe -I http://ozancicak.biz.id/
curl.exe -I http://www.ozancicak.biz.id/
Periksa dua lapis firewall
Tencent Lighthouse mempunyai firewall pada jaringan cloud, sedangkan Ubuntu dapat menjalankan UFW. Keduanya harus mengizinkan trafik. Membuka UFW tidak membantu jika firewall cloud masih menutup port, dan sebaliknya.
sudo ufw status
sudo ufw allow 'Nginx Full'
sudo ss -ltnp | grep -E ':80|:443'
Port SSH tidak diubah dalam prosedur ini. Pembatasan SSH dilakukan secara terpisah agar pemasangan web server tidak mengunci akses administrator.
Periksa server_name sebelum menerbitkan
Certbot plugin Nginx mencari blok yang cocok dengan nama domain. Jika nama tidak ada, Certbot dapat meminta pilihan manual atau menulis pada blok yang tidak diinginkan. Gunakan nginx -T untuk melihat konfigurasi efektif, bukan hanya file yang sedang terbuka di editor.
sudo nginx -T 2>&1 | grep -n -A3 -B3 'server_name ozancicak.biz.id'
sudo nginx -t
Pasang Certbot dari sumber yang dipilih
Panduan deployment proyek menggunakan paket snap. Satu metode instalasi dipilih agar tidak mencampur binary dari apt dan snap. Jika /usr/local/bin/certbot sudah ada, symlink tidak dibuat ulang.
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/local/bin/certbot
sudo certbot --nginx -d ozancicak.biz.id -d www.ozancicak.biz.id
Kedua hostname diminta sekaligus karena navigasi dan DNS mengizinkan domain akar serta www. Sesudah sertifikat terbit, salah satu hostname dapat menjadi canonical dan hostname lain diarahkan menuju canonical melalui redirect permanen.
Verifikasi sertifikat dan redirect
curl -I http://ozancicak.biz.id/
curl -I https://ozancicak.biz.id/
curl -I https://www.ozancicak.biz.id/
sudo certbot certificates
Periksa bahwa HTTP menuju HTTPS, hostname alternatif menuju canonical yang benar, tidak ada loop, dan sertifikat mencantumkan kedua nama. Browser tanpa peringatan belum cukup: uji status serta header agar perilaku crawler juga jelas.
Uji pembaruan otomatis
Sertifikat berumur pendek hanya aman jika pembaruan otomatis bekerja. renew --dry-run mensimulasikan proses tanpa menunggu masa berlaku mendekati akhir. Timer dan log juga diperiksa agar kegagalan berikutnya dapat ditemukan.
sudo certbot renew --dry-run
systemctl list-timers | grep -i certbot
sudo journalctl -u snap.certbot.renew.service --no-pager -n 50
Diagnosis kegagalan umum
Jangan menambahkan HSTS terlalu awal
HSTS membuat browser mengingat bahwa domain hanya boleh memakai HTTPS. Header ini berguna setelah seluruh subdomain dan renewal stabil, tetapi menyulitkan pemulihan bila diterapkan prematur—terutama dengan opsi includeSubDomains. NgodingSantai memprioritaskan HTTPS dan uji renewal dahulu.
Referensi primer
- Certbot instructions for Nginx and snap.
- Let's Encrypt challenge types.
- Nginx configuring HTTPS servers.
Periksa sertifikat dari sisi klien
certbot certificates menunjukkan file lokal, tetapi klien dapat menerima sertifikat berbeda bila SNI masuk ke server block lain. Pemeriksaan eksternal membaca subject, issuer, SAN, serta masa berlaku dari koneksi domain yang sebenarnya.
openssl s_client -connect ozancicak.biz.id:443 -servername ozancicak.biz.id < /dev/null 2>/dev/null | openssl x509 -noout -subject -issuer -dates -ext subjectAltNameCadangkan konfigurasi yang diubah plugin
Plugin Nginx menyunting server block untuk menambahkan lokasi sertifikat dan redirect. Diff konfigurasi sebelum dan sesudah dibaca agar perubahan dipahami. Bila struktur server block kompleks, mode certonly dan konfigurasi manual dapat dipilih, tetapi membutuhkan ketelitian lebih besar.
Jangan menyalin private key sertifikat
Folder /etc/letsencrypt dibatasi root. Private key tidak masuk repository atau web root. Backup terenkripsi dan prosedur pemulihan server direncanakan terpisah. Jika server diganti, sertifikat dapat diterbitkan ulang setelah DNS mencapai origin baru daripada memindahkan key melalui kanal tidak aman.