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.

20. Cài đặt SSL miễn phí với Let’s Encrypt (Certbot)

ICT

1. Vì sao SSL là yêu cầu bắt buộc, không còn là tùy chọn?

Hiện nay, một Web Server không có HTTPS sẽ gặp đồng thời nhiều vấn đề:

  • Trình duyệt cảnh báo “Not Secure”

  • Dữ liệu truyền đi không được mã hóa

  • Không đáp ứng yêu cầu bảo mật cơ bản

  • Nhiều dịch vụ bên thứ ba từ chối tích hợp

Với môi trường production:

SSL không phải để “cho đẹp”, mà là điều kiện tối thiểu để hệ thống được chấp nhận.

Let’s Encrypt giúp giải quyết vấn đề này bằng:

  • Chứng chỉ SSL miễn phí

  • Được các trình duyệt tin cậy

  • Có thể tự động gia hạn


2. Điều kiện bắt buộc trước khi cài SSL

Trước khi chạy Certbot, bắt buộc phải đảm bảo:

  • Domain đã trỏ DNS đúng về IP server

  • Website truy cập được qua HTTP (port 80)

  • Nginx đang chạy ổn định

  • Firewall đã mở port 80 và 443

  • Virtual host đã cấu hình đúng server_name

Nếu bỏ qua các điều kiện này:

Certbot gần như chắc chắn sẽ thất bại.


3. Giới thiệu Certbot và cách hoạt động

Certbot là công cụ chính thức để:

  • Giao tiếp với Let’s Encrypt

  • Xác thực quyền sở hữu domain

  • Cấp và cài chứng chỉ SSL

Cách xác thực phổ biến nhất:

  • HTTP-01 challenge

  • Let’s Encrypt sẽ truy cập vào website qua HTTP

  • Nếu xác thực thành công → cấp SSL

Điều này giải thích vì sao:

HTTP phải hoạt động trước khi có HTTPS.


4. Cài đặt Certbot trên Ubuntu Server

4.1. Cài Certbot và plugin cho Nginx

 
sudo apt install certbot python3-certbot-nginx -y

Kiểm tra phiên bản:

certbot --version 

5. Cấp chứng chỉ SSL cho website

5.1. Cấp SSL tự động cho Nginx (khuyến nghị)

Ví dụ với domain cntt.it:

sudo certbot --nginx -d cntt.it

Certbot sẽ:

  1. Kiểm tra cấu hình Nginx

  2. Xác thực domain

  3. Cấp chứng chỉ

  4. Tự động chỉnh cấu hình Nginx

Lệnh này sẽ được sử dụng trong thực tế nhiều hơn: khi bạn muốn chủ động cấu hình nginx conf, không cho phép cerbot tự động thay đổi cấu hình. Lệnh dưới đây chỉ cấp chứng nhận ssl. Lưu chứng nhận vào thư mục mặc định.

certbot certonly --nginx \
 --cert-name cntt.it \
-d cntt.it;


5.2. Các lựa chọn quan trọng khi chạy Certbot

Trong quá trình chạy, Certbot sẽ hỏi:

  • Email liên hệ → nhập email thật

  • Đồng ý điều khoản → Yes

  • Redirect HTTP → HTTPS
    Nên chọn redirect toàn bộ

Nguyên tắc:

Production chỉ nên phục vụ HTTPS.


6. Cấu hình Nginx sau khi cài SSL

Sau khi Certbot chạy xong:

  • Nginx sẽ có thêm server block HTTPS

  • HTTP sẽ redirect sang HTTPS (nếu chọn)

Kiểm tra cấu hình:

sudo nginx -t
sudo systemctl reload nginx

7. Kiểm tra chứng chỉ SSL

7.1. Kiểm tra từ trình duyệt

  • Truy cập:

    https://cntt.it 
  • Kiểm tra:

    • Không còn cảnh báo bảo mật

    • Chứng chỉ hợp lệ


7.2. Kiểm tra từ dòng lệnh

sudo certbot certificates

Thông tin cần chú ý:

  • Domain

  • Ngày hết hạn

  • Đường dẫn file chứng chỉ


8. Gia hạn SSL tự động – bước cực kỳ quan trọng

8.1. Vì sao phải kiểm tra auto-renew?

Chứng chỉ Let’s Encrypt:

  • Chỉ có hiệu lực 90 ngày

  • Nếu không gia hạn → HTTPS sẽ lỗi

Ubuntu mặc định đã có cron/systemd timer cho Certbot.

Kiểm tra:

sudo systemctl list-timers | grep certbot

8.2. Test gia hạn thủ công (khuyến nghị)

sudo certbot renew --dry-run

Nếu test thành công:

Gia hạn tự động sẽ hoạt động bình thường.


9. Quản lý SSL cho nhiều website

Nguyên tắc:

  • Mỗi website có SSL riêng

  • Có thể gộp nhiều domain trong một chứng chỉ nếu cần

  • Không dùng chung chứng chỉ cho các site không liên quan

Ví dụ:

sudo certbot --nginx -d site1.com -d www.site1.com sudo certbot --nginx -d site2.com

10. Những lỗi SSL thường gặp và nguyên nhân

10.1. Certbot không cấp được SSL

Nguyên nhân thường gặp:

  • DNS chưa propagate

  • Domain trỏ sai IP

  • Firewall chặn port 80

  • server_name không khớp domain


10.2. Website vào được HTTP nhưng không vào được HTTPS

Nguyên nhân:

  • Firewall chưa mở port 443

  • Nginx chưa reload

  • Cấu hình SSL lỗi


11. Những điều KHÔNG nên làm với SSL

  • Không copy chứng chỉ giữa server

  • Không chỉnh tay file SSL nếu không hiểu

  • Không tắt auto-renew

  • Không dùng Let’s Encrypt cho domain nội bộ không public

Nguyên tắc:

SSL càng tự động hóa, hệ thống càng an toàn.


12. Checklist SSL cho Web Server production

  •  Domain trỏ đúng IP

  •  HTTP hoạt động ổn định

  •  Certbot cài đúng

  •  HTTPS truy cập được

  •  Redirect HTTP → HTTPS

  •  Auto-renew hoạt động


13. Bài tiếp theo

Trong Bài 21, chúng ta sẽ tiếp tục hoàn thiện lớp HTTPS:

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

Bài này sẽ giúp:

  • Tránh “sập HTTPS” do quên gia hạn

  • Đảm bảo hệ thống chạy bền nhiều năm