Cài SSL miễn phí Let's Encrypt cho VPS: hướng dẫn đầy đủ 2026
Cách cài SSL miễn phí Let's Encrypt trên VPS bằng Certbot hoặc tự động qua panel: wildcard, tự gia hạn, giới hạn tần suất và sửa các lỗi thường gặp.

Ý chính
- Let's Encrypt cấp chứng chỉ SSL miễn phí, hiện có hạn 90 ngày và phải được gia hạn tự động.
- Xác minh HTTP-01 chỉ dùng cổng 80; chứng chỉ wildcard bắt buộc xác minh qua DNS.
- Từ 10/2/2027 chứng chỉ mặc định còn 64 ngày và từ 16/2/2028 còn 45 ngày, nên gia hạn thủ công không còn khả thi.
- Let's Encrypt đã ngừng gửi email nhắc hết hạn từ 4/6/2025, bạn cần tự giám sát.
Để cài SSL miễn phí Let's Encrypt trên VPS, bạn cần ba thứ: tên miền đã trỏ về IP của VPS, cổng 80 mở ra internet, và một ACME client như Certbot để xin và tự gia hạn chứng chỉ. Trên Ubuntu với nginx, chỉ cần cài Certbot rồi chạy sudo certbot --nginx; nếu dùng control panel như ZoPanel, chứng chỉ được cấp và gia hạn tự động khi bạn tạo website.
Bài viết hướng dẫn cả hai cách, giải thích cách Let's Encrypt xác minh tên miền, cách lấy chứng chỉ wildcard, các giới hạn tần suất cần biết, những thay đổi quan trọng về thời hạn chứng chỉ từ năm 2027, và cách sửa các lỗi khiến việc cấp SSL thất bại.
Let's Encrypt hoạt động như thế nào?
Let's Encrypt là tổ chức cấp chứng chỉ (CA) miễn phí, tự động. Chứng chỉ được cấp qua giao thức ACME: client trên server của bạn chứng minh bạn kiểm soát tên miền, và Let's Encrypt cấp chứng chỉ được mọi trình duyệt tin cậy.
Có hai cách xác minh phổ biến, theo tài liệu về challenge của Let's Encrypt:
| Cách xác minh | Cách làm | Ưu điểm | Hạn chế |
|---|---|---|---|
| HTTP-01 | Đặt một file tại http://tên-miền/.well-known/acme-challenge/ |
Đơn giản, không cần quyền sửa DNS | Chỉ dùng cổng 80; không cấp được wildcard |
| DNS-01 | Tạo bản ghi TXT _acme-challenge |
Cấp được wildcard *.example.com, không cần cổng 80 |
Cần API hoặc quyền quản lý DNS |
Với website thông thường, HTTP-01 là đủ. Chỉ khi cần wildcard bạn mới phải dùng DNS-01.
Chuẩn bị trước khi cài SSL miễn phí Let's Encrypt
- Tên miền trỏ đúng IP. Kiểm tra:
dig +short example.com A
dig +short www.example.com A
dig +short example.com AAAA
Nếu tên miền có bản ghi AAAA (IPv6) trỏ tới nơi khác, việc xác minh có thể thất bại, vì Let's Encrypt sẽ thử kết nối qua IPv6. Xoá AAAA sai hoặc trỏ nó về đúng IPv6 của VPS.
- Cổng 80 mở, cả trên UFW lẫn cloud firewall của nhà cung cấp:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
- nginx đã có server block với
server_name example.com www.example.com;cho website.
Nếu chưa trỏ tên miền, xem bài trỏ tên miền về VPS.
Cách 1: Cài SSL Let's Encrypt thủ công bằng Certbot
Cài Certbot
Certbot là ACME client do EFF phát triển. Hướng dẫn chính thức của Certbot khuyên cài qua snap:
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/local/bin/certbot
Trên Debian 12 (không có snap sẵn) hoặc nếu bạn thích gói apt, dùng gói của bản phân phối:
sudo apt install certbot python3-certbot-nginx
Chỉ dùng một trong hai cách, đừng cài cả hai.
Xin chứng chỉ cho nginx
sudo certbot --nginx -d example.com -d www.example.com
Certbot hỏi email, yêu cầu đồng ý điều khoản, xác minh tên miền qua HTTP-01, rồi tự sửa cấu hình nginx để dùng chứng chỉ và (nếu bạn chọn) chuyển HTTP sang HTTPS. Chứng chỉ nằm ở /etc/letsencrypt/live/example.com/.
Nếu muốn tự sửa cấu hình nginx, dùng sudo certbot certonly --nginx -d example.com rồi thêm đường dẫn fullchain.pem và privkey.pem vào server block.
Kiểm tra tự gia hạn
Cả bản snap lẫn bản apt đều cài sẵn một systemd timer để gia hạn. Kiểm tra:
systemctl list-timers | grep -i certbot
sudo certbot renew --dry-run
Nếu --dry-run báo thành công, việc gia hạn đã được tự động hoá.
Chứng chỉ wildcard
Wildcard cần DNS-01. Lệnh certbot certonly --manual --preferred-challenges dns chạy được nhưng không tự gia hạn, vì mỗi lần bạn phải tạo lại bản ghi TXT bằng tay. Trong thực tế, hãy dùng plugin DNS của Certbot cho nhà cung cấp DNS của bạn (Cloudflare, Route 53…), để Certbot tự tạo bản ghi qua API.
Cách 2: Cài SSL miễn phí tự động với ZoPanel
Nếu bạn quản lý nhiều website, làm thủ công cho từng tên miền nhanh chóng trở nên mệt mỏi. Trong ZoPanel, SSL Let's Encrypt là mặc định (tài liệu SSL):
- Nhập Email quản trị trong Cài đặt (bắt buộc để đăng ký Let's Encrypt).
- Tạo website ở Website → Thêm website, giữ SSL miễn phí (Let's Encrypt).
- Nếu tên miền đã trỏ về server, chứng chỉ được cấp ngay. Nếu chưa, website vẫn chạy HTTP, và mỗi giờ ZoPanel kiểm tra lại DNS; khi tên miền trỏ đúng, chứng chỉ tự được cấp. Sau mỗi lần thất bại, lần thử kế tiếp chờ 2, 4, 8 giờ… tối đa một ngày, để không phí giới hạn tần suất.
- Trong tab SSL của website, bật Chuyển HTTP sang HTTPS. ZoPanel gửi kèm header HSTS một năm, vì vậy chỉ bật khi chắc chắn giữ HTTPS.
Những gì ZoPanel làm thêm:
- Gia hạn: kiểm tra mỗi giờ, gia hạn khi chứng chỉ còn dưới 30 ngày; nếu lỗi, thử lại sau 1, 2, 4, rồi 8 ngày.
- Cảnh báo: gửi Gia hạn SSL thất bại kèm lỗi cụ thể cho quản trị viên và chủ website, và SSL sắp hết hạn mỗi ngày khi chứng chỉ còn dưới 14 ngày.
- Wildcard: cài máy chủ DNS, tạo vùng DNS cho tên miền (DNS), rồi chọn Thêm *.example.com (wildcard) trong tab SSL. ZoPanel tự xác minh qua DNS và tự gia hạn.
- Chứng chỉ mua ngoài: dán chứng chỉ và private key PEM vào Chứng chỉ riêng; ZoPanel kiểm tra khoá khớp, đúng tên miền, còn hạn.
- Tên miền phụ chưa trỏ được bỏ qua để không làm hỏng cả lần cấp, và được thêm ở lần sau.
Thay đổi quan trọng: chứng chỉ ngắn hạn hơn và không còn email nhắc
Hai thay đổi khiến việc tự động hoá trở thành bắt buộc:
Let's Encrypt đã ngừng gửi email nhắc hết hạn từ ngày 4/6/2025 (thông báo chính thức). Nếu trước đây bạn dựa vào email đó để biết gia hạn bị lỗi, giờ bạn phải tự giám sát.
Thời hạn chứng chỉ đang được rút ngắn. Theo kế hoạch của Let's Encrypt:
| Ngày | Thay đổi với profile mặc định |
|---|---|
| Hiện tại | Chứng chỉ 90 ngày |
| 10/2/2027 | Chứng chỉ 64 ngày, thời gian dùng lại xác minh còn 10 ngày |
| 16/2/2028 | Chứng chỉ 45 ngày, thời gian dùng lại xác minh còn 7 giờ |
Let's Encrypt khuyên dùng ARI (ACME Renewal Information) nếu client hỗ trợ, hoặc gia hạn khi đã dùng khoảng hai phần ba thời hạn. Một cron job cố định "60 ngày gia hạn một lần" sẽ không còn đúng. Hãy kiểm tra client của bạn tính lịch theo ngày hết hạn thực tế.
Giới hạn tần suất của Let's Encrypt
Theo trang rate limits:
| Giới hạn | Mức |
|---|---|
| Chứng chỉ mới cho mỗi tên miền đăng ký | 50 chứng chỉ / 7 ngày |
| Chứng chỉ trùng y hệt bộ tên miền | 5 chứng chỉ / 7 ngày |
| Xác minh thất bại cho mỗi tên miền, mỗi tài khoản | 5 lần / giờ |
| Đơn hàng mới mỗi tài khoản | 300 / 3 giờ |
Lỗi hay gặp nhất là chạy đi chạy lại lệnh khi DNS chưa đúng và chạm giới hạn 5 lần thất bại mỗi giờ. Khi thử nghiệm, dùng --dry-run hoặc môi trường staging (--test-cert).
Lỗi thường gặp khi cài SSL và cách sửa
| Triệu chứng | Nguyên nhân thường gặp | Cách sửa |
|---|---|---|
Timeout during connect |
Cổng 80 bị chặn ở UFW hoặc cloud firewall | Mở cổng 80 ở cả hai nơi |
NXDOMAIN hoặc sai IP |
Tên miền chưa trỏ, DNS chưa cập nhật | Kiểm tra dig, chờ TTL hết |
| Xác minh lỗi dù IPv4 đúng | Bản ghi AAAA trỏ sai | Xoá hoặc sửa AAAA |
CAA record prevents issuance |
Bản ghi CAA chỉ cho phép CA khác | Thêm 0 issue "letsencrypt.org" |
| Website sau Cloudflare không được cấp tự động | Tên miền trỏ về IP của Cloudflare | Cấp thủ công hoặc dùng Cloudflare Origin certificate |
| Ổ khoá cảnh báo "not secure" sau khi có SSL | Nội dung hỗn hợp (ảnh, script còn http://) |
Sửa URL trong database/theme sang https:// |
Kiểm tra chứng chỉ đang được phục vụ:
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
| openssl x509 -noout -issuer -dates
Với website đứng sau Cloudflare, xem thêm bài dùng Cloudflare cho VPS.
Kết luận
Cài SSL miễn phí Let's Encrypt không khó: trỏ tên miền, mở cổng 80, chạy Certbot và kiểm tra gia hạn bằng --dry-run. Điều quan trọng trong những năm tới là tự động hoá và giám sát, vì chứng chỉ sẽ ngắn hạn hơn và Let's Encrypt không còn nhắc qua email.
Nếu bạn quản lý nhiều website, ZoPanel cấp, gia hạn và cảnh báo SSL cho từng website tự động, kể cả trên gói Free (10 website, 10 database). Xem chi tiết trong tài liệu SSL.
Câu hỏi thường gặp
Chứng chỉ SSL Let's Encrypt có thật sự miễn phí không?
Có. Let's Encrypt là tổ chức phi lợi nhuận, cấp chứng chỉ miễn phí được mọi trình duyệt lớn tin cậy. Bạn chỉ cần một ACME client như Certbot, hoặc control panel có tích hợp sẵn.
Chứng chỉ Let's Encrypt có hạn bao lâu?
Hiện tại mặc định là 90 ngày. Theo kế hoạch đã công bố, từ ngày 10/2/2027 chứng chỉ mặc định còn 64 ngày và từ 16/2/2028 còn 45 ngày, nên việc gia hạn phải được tự động hoá.
Có cài được SSL Let's Encrypt cho wildcard không?
Có, nhưng phải xác minh qua DNS (DNS-01), không dùng được HTTP. Hãy dùng plugin DNS của Certbot cho nhà cung cấp DNS, hoặc control panel tự quản lý vùng DNS như ZoPanel để việc gia hạn được tự động.
Vì sao Certbot báo lỗi timeout khi xác minh?
Thường là do cổng 80 bị chặn ở tường lửa của server hoặc của nhà cung cấp VPS, hoặc tên miền chưa trỏ về đúng IP. Kiểm tra bằng dig và mở cổng 80 ở cả UFW lẫn cloud firewall.
Nên dùng SSL miễn phí hay SSL trả phí?
Với đa số website, kể cả cửa hàng online, chứng chỉ Let's Encrypt (loại DV) mã hoá kết nối tốt như chứng chỉ DV trả phí. Chứng chỉ OV/EV trả phí chỉ cần khi tổ chức của bạn yêu cầu xác minh doanh nghiệp hoặc có yêu cầu hợp đồng cụ thể.
Đọc tiếp

Bảo mật VPS Ubuntu: 10 bước cần làm ngay sau khi cài đặt
Hướng dẫn bảo mật VPS Ubuntu 24.04 từng bước: SSH key, tắt đăng nhập mật khẩu, UFW, Fail2ban, cập nhật tự động và sao lưu, kèm lệnh chính xác và lỗi cần tránh.

Cài WordPress trên VPS: hướng dẫn từ A đến Z (thủ công và bằng panel)
Hướng dẫn cài WordPress trên VPS Ubuntu 24.04 hoặc Debian 12 theo hai cách, thủ công với Nginx, PHP, MariaDB, SSL hoặc bằng control panel, kèm bảo mật sau cài.

Thay thế aaPanel: tiêu chí chọn panel an toàn hơn và cách chuyển
Đang tìm thay thế aaPanel? So sánh HestiaCP, CloudPanel, ZoPanel và cPanel theo bảo mật, cách ly, giá, kèm checklist gia cố aaPanel và cách chuyển website.