Tự Động Hóa Triển Khai và Quản Lý Chứng Chỉ HTTPS trên Máy Chủ Linux

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.

Thẻ: let's-encrypt certbot nginx systemd-timers ssl-tls

Đăng vào ngày 25 tháng 6 lúc 06:16