Website được thiết kế tối ưu cho thành viên chính thức. Hãy Đăng nhập hoặc Đăng ký để truy cập đầy đủ nội dung và chức năng. Nội dung bạn cần không thấy trên website, có thể do bạn chưa đăng nhập. Nếu là thành viên của website, bạn cũng có thể yêu cầu trong nhóm Zalo "CNTT" các nội dung bạn quan tâm.

21. Gia hạn SSL tự động và kiểm tra định kỳ

ICT

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:

    certbot renew

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:

sudo systemctl list-timers | grep certbot

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

sudo systemctl status certbot.timer

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

sudo certbot renew --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

sudo certbot certificates

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:

ssl_certificate     /etc/letsencrypt/live/domain/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domain/privkey.pem;

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

sudo systemctl reload nginx

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 certificates

  • Truy 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-run thành công

  •  Nginx 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