1. Vì sao SSL hay “chết” không phải do kỹ thuật, mà do con người?
Trong thực tế vận hành, rất nhiều sự cố HTTPS xảy ra không phải vì:
Nginx lỗi
Certbot lỗi
Let’s Encrypt lỗi
Mà vì:
Quên kiểm tra gia hạn
Nghĩ rằng “đã tự động rồi thì khỏi lo”
Không có quy trình kiểm tra định kỳ
Hệ quả:
Website bị trình duyệt chặn
Người dùng mất niềm tin
Ảnh hưởng nghiêm trọng đến uy tín hệ thống
Nguyên tắc:
SSL chỉ an toàn khi việc gia hạn được kiểm soát, không phải chỉ “bật cho có”.
2. Cơ chế gia hạn SSL của Let’s Encrypt hoạt động thế nào?
Let’s Encrypt cấp chứng chỉ có thời hạn:
90 ngày
Certbot trên Ubuntu:
Tự động tạo systemd timer (hoặc cron)
Định kỳ chạy lệnh:
Cơ chế này:
Chỉ gia hạn khi chứng chỉ sắp hết hạn
Không ảnh hưởng website đang chạy
Không cần can thiệp thủ công nếu mọi thứ đúng
3. Kiểm tra cơ chế auto-renew đang hoạt động
3.1. Kiểm tra systemd timer
Trên Ubuntu Server, chạy:
Kết quả mong đợi:
Có timer của certbot
Thời gian chạy định kỳ (thường 2 lần/ngày)
Nếu không thấy timer:
Auto-renew chưa được kích hoạt → cần xử lý ngay.
3.2. Kiểm tra service Certbot
Trạng thái mong đợi:
active (waiting)
4. Test gia hạn SSL an toàn (bắt buộc làm ít nhất một lần)
4.1. Vì sao phải test?
Auto-renew không có nghĩa là chắc chắn hoạt động.
Có thể thất bại vì:
DNS thay đổi
Firewall bị siết lại
Cấu hình Nginx thay đổi
Virtual host bị xoá hoặc sửa sai
4.2. Test gia hạn với dry-run
Kết quả mong đợi:
Không có lỗi
Certbot báo renew thành công (giả lập)
Nếu dry-run thất bại:
Chứng chỉ thật cũng sẽ không gia hạn được.
5. Kiểm tra chứng chỉ đang sử dụng
5.1. Kiểm tra bằng Certbot
Cần chú ý:
Domain nào dùng chứng chỉ nào
Ngày hết hạn
Đường dẫn file chứng chỉ
5.2. Kiểm tra từ phía Nginx
Mở cấu hình site HTTPS, xác nhận:
Nguyên tắc:
Nginx chỉ nên trỏ tới đường dẫn trong
/etc/letsencrypt/live/.
6. Reload Nginx sau khi gia hạn – có cần không?
Certbot thường tự reload Nginx sau khi gia hạn.
Tuy nhiên, để an toàn:
Kiểm tra log
Có thể reload thủ công nếu cần
Reload:
Không làm gián đoạn kết nối
Áp dụng chứng chỉ mới ngay lập tức
7. Thiết lập kiểm tra SSL định kỳ (quy trình vận hành)
7.1. Kiểm tra thủ công theo chu kỳ
Khuyến nghị:
1 lần / tháng
Hoặc trước các đợt bảo trì lớn
Checklist nhanh:
certbot certificatesTruy cập HTTPS từ trình duyệt
Kiểm tra ngày hết hạn
7.2. Ghi chú và tài liệu hóa
Nên ghi lại:
Domain
Ngày cấp
Ngày hết hạn
Người chịu trách nhiệm
Điều này đặc biệt quan trọng khi:
Bàn giao hệ thống
Thay đổi nhân sự CNTT
8. Những lỗi thường gặp làm auto-renew thất bại
8.1. Firewall chặn port 80
Certbot dùng HTTP-01 challenge:
Cần port 80 hoạt động
Nếu:
Chỉ mở 443
Hoặc redirect sai
→ Gia hạn sẽ thất bại.
8.2. Thay đổi server_name không đồng bộ
DNS trỏ domain A
Nhưng Nginx không có server_name tương ứng
→ Certbot không xác thực được.
8.3. Dùng /etc/hosts để “giả lập DNS”
Lúc test thì được
Lúc gia hạn thật thì thất bại
Nguyên tắc:
Let’s Encrypt chỉ tin DNS thật, không tin hosts file.
9. Cảnh báo: không chờ đến ngày hết hạn mới xử lý
Một sai lầm rất nguy hiểm:
Chỉ kiểm tra SSL khi thấy cảnh báo đỏ
Lúc đó:
Đã ảnh hưởng người dùng
Khó xử lý gấp
Có thể mất thời gian chờ DNS
Nguyên tắc:
SSL phải được kiểm tra trước khi có vấn đề, không phải sau khi đã lỗi.
10. Checklist SSL auto-renew cho production
Certbot timer đang active
certbot renew --dry-runthành côngNginx trỏ đúng file SSL
Port 80/443 luôn mở
Có lịch kiểm tra định kỳ
Có ghi chú quản lý chứng chỉ
11. Bài tiếp theo
Trong Bài 23, chúng ta sẽ hoàn thiện lớp bảo mật HTTPS:
Cấu hình HTTPS chuẩn, loại bỏ HTTP
Bài này sẽ hướng dẫn:
Redirect đúng cách
Tránh loop
Chuẩn hóa HTTPS cho production
- Đăng nhập để gửi ý kiến