Thiết lập SSL/TLS miễn phí với Let’s Encrypt để secure Ubuntu server chuẩn HTTPS
Website chạy HTTP → dữ liệu đi “trần”: login, cookie, form, API token dễ bị sniff/MITM. HTTPS → mã hóa, xác thực domain, tăng trust, tốt SEO, bắt buộc cho nhiều API hiện đại. Tin tốt: Let’s Encrypt cấp SSL/TLS cert miễn phí, tự động hóa tốt, renew dễ. Trên Ubuntu server, combo phổ biến nhất: Nginx/Apache + Certbot + Let’s Encrypt.
Bài này hướng dẫn setup chuẩn HTTPS cho Ubuntu server, kèm kiểm tra, auto-renew, hardening cơ bản.
1. Let’s Encrypt là gì?
Let’s Encrypt → CA miễn phí, tự động, mở. Cert được browser tin cậy. Hạn cert: 90 ngày → cần auto-renew.
Ưu điểm:
– Miễn phí
– Tự động cấp/gia hạn
– Hỗ trợ wildcard qua DNS challenge
– Tương thích Nginx, Apache
– Chuẩn ACME
Nhược điểm:
– Cert ngắn hạn → phải đảm bảo renew chạy ổn
– Rate limit → test sai nhiều lần có thể bị chặn tạm
– Cần domain trỏ đúng server
2. Điều kiện trước khi cài SSL/TLS
Trước khi chạy Certbot, cần:
– Ubuntu server: 20.04 / 22.04 / 24.04
– User có quyền sudo
– Domain đã trỏ DNS về IP server
– Web server đang chạy: Nginx hoặc Apache
– Firewall mở port:
– 80/tcp HTTP
– 443/tcp HTTPS
Kiểm tra IP:
curl -4 ifconfig.me
Kiểm tra DNS:
dig +short example.com
dig +short www.example.com
Kết quả phải là IP server.
Kiểm tra web server:
sudo systemctl status nginx
hoặc:
sudo systemctl status apache2
3. Mở firewall cho HTTP/HTTPS
Nếu dùng UFW:
sudo ufw status
Nginx:
sudo ufw allow 'Nginx Full'
Apache:
sudo ufw allow 'Apache Full'
Hoặc mở thủ công:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
Kiểm tra:
sudo ufw status
Port 80 phải mở vì Let’s Encrypt thường dùng HTTP-01 challenge để xác minh domain.
HTTP-01 cần port 80 public. Nếu server không public hoặc cần wildcard:
*.example.com
→ dùng DNS-01 challenge.
Ví dụ:
sudo certbot certonly --manual --preferred-challenges dns -d example.com -d "*.example.com"
Certbot yêu cầu tạo TXT record:
_acme-challenge.example.com
Sau khi DNS propagate → cert cấp.
Production nên dùng DNS plugin của Cloudflare/Route53 để auto-renew wildcard.
Kết luận thực tế
Ubuntu server chạy HTTPS chuẩn không khó: domain đúng DNS, port mở, Certbot cài đúng, web server config sạch. Với Nginx/Apache, Let’s Encrypt giúp cấp cert miễn phí trong vài phút, redirect HTTP → HTTPS tự động, renew qua systemd timer.
Checklist cuối:
– Domain trỏ đúng IP
– Port 80/443 mở
– sudo certbot --nginx hoặc --apache chạy OK
– sudo certbot renew --dry-run pass
– SSL Labs đạt A/A+
– HSTS chỉ bật khi chắc chắn
– Private key được bảo vệ
Làm đúng các bước trên → Ubuntu server có HTTPS miễn phí, bảo mật, tự gia hạn, đủ chuẩn production.