Cài Đặt Certbot trên Các Bản Phân Phối Linux
Chứng chỉ SSL/TLS từ Let's Encrypt được triển khai qua công cụ Certbot. Cách cài đặt khác nhau tùy hệ điều hành:
CentOS/RHEL 8+
sudo dnf install certbot python3-certbot-nginx -y
CentOS 7
sudo yum install epel-release -y
sudo yum install certbot python3-certbot-nginx -y
Ubuntu/Debian
sudo apt update
sudo apt install certbot python3-certbot-nginx -y
Chiến Lược Cấp Chứng Chỉ
Chọn phương pháp phù hợp với môi trường production:
Chế Độ Chỉ Cấp Chứng Chỉ (certonly)
sudo certbot certonly --nginx -d domain.com -d www.domain.com
- Chỉ lưu chứng chỉ tại
/etc/letsencrypt/live/domain.com/ - Không thay đổi cấu hình Nginx
- Yêu cầu chỉnh tay trong file cấu hình Nginx:
server {
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;
# ... cấu hình khác
}
Chế Độ Tự Động (Không Khuyến Cáo cho Production)
Sử dụng khi setup server mới:
sudo certbot --nginx
Công cụ sẽ tự chèn khối SSL và redirect HTTP→HTTPS vào file cấu hình. Tránh dùng cho hệ thống đã có cấu hình phức tạp do nguy cơ xung đột proxy_pass hoặc logic hiện có.
Cấu Hình Tự Động Gia Hạn với Systemd
Thay thế cron bằng cơ chế timer chính xác hơn:
Tạo Service Gia Hạn
/etc/systemd/system/ssl-renewal.service
[Unit]
Description=Auto-renew SSL certificates
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/bin/certbot renew --quiet --post-hook "nginx -t && systemctl reload nginx"
Thiết Lập Lịch Trình
/etc/systemd/system/ssl-renewal.timer
[Unit]
Description=Daily SSL renewal check
[Timer]
OnCalendar=*-*-* 03:15,15:30:00
RandomizedDelaySec=45m
Persistent=true
[Install]
WantedBy=timers.target
Kích Hoạt Cơ Chế
sudo systemctl daemon-reload
sudo systemctl enable --now ssl-renewal.timer
sudo systemctl list-timers | grep ssl
Bảng Điều Khiển Quản Trị
| Nhiệm Vụ | Lệnh Thực Thi |
|---|---|
| Kiểm tra trạng thái chứng chỉ | certbot certificates |
| Chạy thử gia hạn | certbot renew --dry-run --quiet |
| Xóa chứng chỉ không dùng | certbot delete --cert-name domain.com |
| Kiểm tra cấu hình Nginx | nginx -t |
Giải Quyết Sự Cố Thường Gặp
Câu hỏi: Tại sao chứng chỉ không được gia hạn tự động?
Trả lời: Certbot chỉ thực sự gia hạn khi chứng chỉ sắp hết hạn (dưới 30 ngày). Dòng log "No renewals needed" là bình thường - hệ thống đang hoạt động đúng.
Câu hỏi: Lỗi "Failed authorization" khi cấp chứng chỉ?
Trả lời: Đảm bảo cổng 80 mở trên tường lửa và tên miền trỏ đúng IP máy chủ. Let's Encrypt yêu cầu truy cập HTTP để xác thực quyền sở hữu tên miền.
Câu hỏi: Có cần giữ cron job cũ không?
Trả lời: Không. Systemd timer đã thay thế hoàn toàn chức năng cron. Xóa file /etc/cron.d/certbot nếu tồn tại để tránh xung đột.