Fast Byte - Thuê VPS Giá Rẻ
Hướng dẫn chung

Hướng Dẫn Cài SSL Let’s Encrypt Bằng Certbot Trên VPS Ubuntu

Cài SSL Let’s Encrypt bằng Certbot là việc nên làm ngay nếu website của bạn vẫn chạy HTTP: trình duyệt gắn nhãn “Không an toàn”, người dùng rời trang nhanh hơn và Google cũng ít ưu tiên hiển thị hơn. Quy trình dưới đây hoàn toàn miễn phí, tự động hóa gần như toàn bộ […]

Ảnh đại diện adminadmin16 phút đọc

Cài SSL Let’s Encrypt bằng Certbot là việc nên làm ngay nếu website của bạn vẫn chạy HTTP: trình duyệt gắn nhãn “Không an toàn”, người dùng rời trang nhanh hơn và Google cũng ít ưu tiên hiển thị hơn. Quy trình dưới đây hoàn toàn miễn phí, tự động hóa gần như toàn bộ và chỉ mất khoảng 10 phút trên VPS Ubuntu. Hướng dẫn do Thuê VPS Giá Rẻ – Fast Byte biên soạn từ thực tế triển khai, áp dụng được cho cả Nginx lẫn Apache.

Let’s Encrypt là gì? Certbot là gì?

Let’s Encrypt là nhà cung cấp chứng chỉ SSL/TLS miễn phí, vận hành theo giao thức tự động hóa ACME và được mọi trình duyệt chính thống tin cậy. Certbot là công cụ mã nguồn mở do EFF phát triển, giúp bạn xin cấp, cài đặt và gia hạn chứng chỉ trên máy chủ chỉ với vài dòng lệnh. Tài liệu chính thức của cả hai nằm tại certbot.eff.org.

Điểm cần hiểu trước khi bắt đầu: chứng chỉ Let’s Encrypt chỉ có hạn 90 ngày. Đây là thiết kế chủ đích để buộc hệ thống tự động hóa việc gia hạn, đồng thời giảm rủi ro nếu khóa riêng bị lộ trong thời gian dài. Certbot lo toàn bộ phần này, bạn chỉ cấu hình một lần. Nếu mới làm quen VPS, nên đọc qua chuyên mục hướng dẫn kỹ thuật của Fast Byte để nắm các thao tác nền tảng như SSH và cập nhật hệ thống trước khi vào phần cài đặt.

Certbot

SSL miễn phí khác SSL trả phí ở điểm nào?

SSL miễn phí khác SSL trả phí có mức mã hóa như nhau, khác nhau ở loại xác thực và dịch vụ đi kèm. Let’s Encrypt chỉ cấp chứng chỉ DV (Domain Validation), tức xác minh bạn sở hữu tên miền. SSL trả phí có thêm OV, EV xác thực danh tính tổ chức, kèm chính sách bảo hiểm bồi thường.

Tiêu chí SSL Let’s Encrypt (miễn phí) SSL trả phí
Chi phí Miễn phí vĩnh viễn Từ vài trăm nghìn đến vài triệu đồng/năm
Loại xác thực Chỉ DV (sở hữu tên miền) DV, OV, EV (xác thực tổ chức)
Thời hạn 90 ngày, tự gia hạn 1 năm trở lên
Wildcard Có, qua DNS-01 challenge
Bảo hiểm bồi thường Không Có, tùy nhà cung cấp
Phù hợp với Blog, landing page, shop nhỏ, dev/test Doanh nghiệp cần chứng thực tổ chức

Trình duyệt hiển thị ổ khóa giống hệt nhau với mọi loại chứng chỉ, nên người dùng thường không phân biệt được. Với blog, landing page, shop vừa và nhỏ hay môi trường dev/test, DV là đủ. Bạn chỉ cần cân nhắc SSL trả phí khi có yêu cầu xác thực danh tính tổ chức chính thức.

THUÊ VPS GIÁ RẺ CÙNG FAST BYTE

Cần VPS Ubuntu Toàn Quyền Quản Trị?

Certbot cần quyền root và quyền can thiệp vào web server, những thứ shared hosting không bao giờ cấp. Muốn tự cài SSL và kiểm soát hoàn toàn cấu hình, bạn cần một VPS riêng. Fast Byte cho thuê từ 50K/tháng, mức tương đương hosting gói trả phí phổ thông nhưng bạn nắm trọn máy chủ.

CPU Intel GoldSSD NVMe U.2

Từ 50K/tháng

Bandwidth Không Giới Hạn

Điều kiện cần để cài SSL Let’s Encrypt thành công trên VPS Ubuntu

Certbot xác thực quyền sở hữu tên miền bằng HTTP-01 challenge: máy chủ của Let’s Encrypt truy cập tên miền của bạn qua port 80 để đọc file xác thực. Nghĩa là nếu tên miền chưa trỏ đúng IP hoặc port 80 bị chặn, mọi thao tác phía sau đều vô nghĩa. Chạy qua checklist dưới đây trước khi gõ lệnh đầu tiên:

  • Tên miền đã trỏ A record về đúng IP VPS (kiểm cả bản ghi www nếu dùng).
  • Port 80 và 443 mở trên firewall của VPS.
  • Nginx hoặc Apache đang chạy, server block / virtual host khai báo đúng server_name.
  • Quyền sudo hoặc root trên Ubuntu 20.04, 22.04 hoặc 24.04 LTS.
dig +short tenmiencuaban.com
# Kết quả phải trả về đúng IP VPS của bạn, ví dụ: 203.0.113.10
sudo ufw status
sudo ufw allow 'Nginx Full'   # mở đồng thời 80/tcp và 443/tcp

Mở port cho Nginx Web Server

⚠ Lưu ý quan trọng:

Tên miền phải trỏ A record về đúng IP VPS và port 80 phải được mở trước khi chạy Certbot. Nếu không, quá trình xác thực HTTP-01 sẽ thất bại và bạn sẽ gặp lỗi “challenge failed”.

Đang dùng Cloudflare với proxy bật (biểu tượng cloud cam)? Request xác thực sẽ không tới thẳng VPS và HTTP-01 dễ thất bại. Giải pháp: tạm chuyển bản ghi sang DNS only (cloud xám), cấp chứng chỉ xong thì bật lại. SSL là lớp bảo vệ cơ bản nhất; trước khi đưa website ra production, hãy rà thêm checklist bảo mật VPS trước khi production để đóng các điểm yếu còn lại ở mức hệ thống.

Từng bước cài SSL Let’s Encrypt bằng Certbot cho Nginx

Phần cốt lõi dưới đây thực hiện trên Ubuntu 22.04 LTS với Nginx (LEMP stack). Nếu bạn cài Certbot qua Snap (phương thức EFF khuyến nghị), plugin Nginx đã tích hợp sẵn và không cần cài thêm gói python3-certbot-nginx.

Bước 1: Cài Certbot qua Snap

Nếu từng cài Certbot qua APT, gỡ trước để tránh xung đột phiên bản: sudo apt remove certbot. Sau đó cài qua Snap:

sudo apt update
sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

Kiểm tra bằng certbot --version. Lệnh ln tạo liên kết để các script cũ gọi certbot trực tiếp vẫn hoạt động.

Cài Certbot qua Snap

Bước 2: Cấp chứng chỉ với certbot –nginx

sudo certbot --nginx -d tenmiencuaban.com -d www.tenmiencuaban.com

Lần đầu chạy, Certbot hỏi lần lượt: địa chỉ email (để nhận cảnh báo hết hạn), đồng ý điều khoản dịch vụ (gõ Y), và có nhận tin từ EFF hay không. Sau đó Certbot đọc server block hiện có, đặt file xác thực lên port 80, chờ Let’s Encrypt phê duyệt rồi ghi chứng chỉ vào /etc/letsencrypt/live/tenmiencuaban.com/.

Bước quan trọng cuối: Certbot hỏi chọn No redirect hay Redirect. Chọn số 2 để tự động chuyển toàn bộ truy cập HTTP sang HTTPS. Output thành công có dòng “Successfully enabled HTTPS” kèm đường dẫn file chứng chỉ. Nếu Certbot báo không tìm thấy tên miền, mở file trong /etc/nginx/sites-available/, kiểm tra server_name đã khai báo đúng chưa, reload Nginx rồi chạy lại.

Cấp chứng chỉ với certbot --nginx

Bước 3: Kiểm tra chứng chỉ và redirect HTTP sang HTTPS

sudo certbot certificates
curl -I http://tenmiencuaban.com

Lệnh đầu liệt kê chứng chỉ đang có, ngày hết hạn và đường dẫn file. Lệnh hai phải trả về HTTP/1.1 301 Moved Permanently kèm Location: https://.... Mở website bằng https:// và nhìn biểu tượng ổ khóa trên thanh địa chỉ để xác nhận.

Kiểm tra chứng chỉ

Muốn tự tay kiểm soát redirect, thay khối server trên port 80 bằng cấu hình sau:

server {
    listen 80;
    server_name tenmiencuaban.com www.tenmiencuaban.com;
    return 301 https://$host$request_uri;
}
sudo nginx -t && sudo systemctl reload nginx

Luôn chạy nginx -t trước khi reload để tránh nạp cấu hình lỗi làm sập website.

Cài SSL cho Apache bằng Certbot trên Ubuntu

Với Apache (LAMP stack), quy trình gần như tương tự. Điểm khác duy nhất là plugin riêng và file cấu hình virtual host thay vì server block:

sudo apt install certbot python3-certbot-apache
sudo certbot --apache -d tenmiencuaban.com -d www.tenmiencuaban.com

Gói python3-certbot-apache cung cấp plugin Apache cho Certbot bản APT. Certbot tự thêm cấu hình SSL vào virtual host trong /etc/apache2/sites-available/ và thiết lập redirect khi bạn chọn tùy chọn Redirect. Output thành công có dạng tương tự Nginx.

Đang dùng Certbot bản Snap từ phần trước? Plugin Apache đã có sẵn, chỉ cần chạy sudo certbot --apache, không cài trùng gói APT. Ít muốn thao tác dòng lệnh hơn? Một số control panel tích hợp sẵn Let’s Encrypt và quản lý gia hạn hộ bạn, ví dụ như cách cài đặt và cấu hình VestaCP nếu muốn quản trị VPS qua giao diện.

THUÊ VPS GIÁ RẺ CÙNG FAST BYTE

Săn Ưu Đãi VPS Tiết Kiệm

Cài Certbot, Nginx, Apache hay bất kỳ stack nào cũng cần quyền quản trị hoàn chỉnh trên máy chủ. Các gói VPS của Fast Byte cho bạn quyền root đầy đủ, SSD NVMe U.2 và network port 100 Mbps, dùng được cho website thật chứ không chỉ môi trường test. Đang có deal tiết kiệm, giá tham khảo từ 50K/tháng.

Full quyền rootSSD NVMe U.2

Port 100 Mbps

Từ 50K/tháng

Trường hợp đặc biệt: standalone, webroot và wildcard

Hai chế độ --nginx--apache phủ phần lớn nhu cầu. Ba trường hợp dưới đây xử lý phần còn lại.

certbot standalone: cấp chứng chỉ khi chưa có web server

Certbot tạm khởi động web server riêng trên port 80 để xác thực, nên điều kiện là port 80 phải trống:

sudo certbot certonly --standalone -d tenmiencuaban.com

Nếu Nginx/Apache đang chạy, phải stop tạm (sudo systemctl stop nginx) rồi start lại sau khi cấp xong. Nhược điểm: mỗi lần gia hạn đều phải dừng web server, nên standalone chỉ phù hợp máy chủ không chạy web thường trực, ví dụ dùng cho mail server hoặc ứng dụng nội bộ.

webroot: gia hạn không cần dừng dịch vụ

sudo certbot certonly --webroot -w /var/www/tenmiencuaban -d tenmiencuaban.com

Certbot đặt file xác thực vào thư mục webroot; Let’s Encrypt đọc qua port 80 như truy cập bình thường nên không gián đoạn dịch vụ. Cách này phù hợp khi bạn muốn tự quản lý toàn bộ cấu hình SSL trong Nginx/Apache thay vì để Certbot sửa file.

Wildcard certificate qua DNS-01 challenge với Cloudflare

Chứng chỉ wildcard (*.tenmiencuaban.com) bắt buộc xác thực qua DNS, không dùng được HTTP-01. Với Cloudflare, cài plugin DNS trước:

sudo snap set certbot trust-plugin-with-root=ok
sudo snap install certbot-dns-cloudflare

Tạo file chứa API token của Cloudflare tại /root/.secrets/cloudflare.ini:

dns_cloudflare_api_token = TOKEN_CLOUDFLARE_CUA_BAN
sudo chmod 600 /root/.secrets/cloudflare.ini
sudo certbot certonly \
  --dns-cloudflare \
  --dns-cloudflare-credentials /root/.secrets/cloudflare.ini \
  -d tenmiencuaban.com -d "*.tenmiencuaban.com"

Quyền 600 trên file token là bắt buộc và không bao giờ commit file này lên repo. Sau khi HTTPS ổn định, bước tiếp theo thường là deploy ứng dụng thật: bạn có thể dùng nền tảng self-hosted PaaS Coolify ngay trên VPS với cấp phát SSL tự động cho từng ứng dụng, hoặc triển khai ứng dụng bằng Docker Compose trên Ubuntu nếu muốn kiểm soát từng layer.

Tự động gia hạn SSL Let’s Encrypt bằng Certbot đúng cách

Hạn 90 ngày nghĩa là nếu không tự động hóa, bạn sẽ phải thay chứng chỉ bằng tay mỗi quý, và sớm muộn cũng quên một lần. Phần dưới đây đảm bảo điều đó không xảy ra. Certbot cài qua Snap tự tạo systemd timer chạy kiểm tra hai lần mỗi ngày. Xác nhận timer tồn tại:

systemctl list-timers | grep certbot

Chạy một vòng gia hạn giả lập để kiểm tra mà không chạm vào chứng chỉ thật:

sudo certbot renew --dry-run

Nếu thấy dòng “Congratulations, all simulated renewals succeeded” thì cơ chế đã sẵn sàng. Certbot chỉ gia hạn khi chứng chỉ còn dưới 30 ngày hạn, nên sẽ không có gì diễn ra hằng ngày. Đó là trạng thái bình thường.

Dùng Certbot bản APT mà không thấy timer? Thêm cron job thủ công:

sudo crontab -e
# Thêm dòng sau:
0 3 * * * /usr/bin/certbot renew --quiet

Chạy lúc 3 giờ sáng với --quiet để chỉ nhận email khi có lỗi. Địa chỉ email đăng ký với Let’s Encrypt chính là kênh nhận cảnh báo này. Xem nhanh trạng thái toàn bộ chứng chỉ bằng sudo certbot certificates. Muốn chủ động hơn nữa, hãy giám sát VPS với Zabbix hoặc công cụ tương tự để nhận cảnh báo sớm mọi bất thường của máy chủ, không chỉ riêng chứng chỉ.

Lỗi thường gặp khi cài SSL bằng Certbot và cách xử lý

Đa số sự cố khi cài SSL Let’s Encrypt bằng Certbot quy về vài nhóm dưới đây. Tra theo triệu chứng sẽ nhanh hơn đọc log toàn bộ.

Triệu chứng Nguyên nhân phổ biến Cách xử lý
“Challenge failed” hoặc “Connection refused” Domain chưa trỏ A record về IP VPS, port 80 bị chặn, web server không chạy Kiểm tra dig +short domain, mở ufw allow 80/tcp, khởi động web server
Xác thực thất bại khi domain đang qua Cloudflare proxy Cloud cam khiến request xác thực không tới thẳng VPS Tạm chuyển DNS only (cloud xám), cấp xong bật lại proxy
“Too many failed authorizations” / bị từ chối cấp mới Rate limit: 5 lần xác thực thất bại mỗi giờ mỗi hostname, 5 chứng chỉ trùng lặp mỗi tuần Chờ hết cửa sổ giới hạn; dùng --staging khi test
Trình duyệt báo chứng chỉ hết hạn Timer/cron gia hạn không chạy hoặc renew config thiếu chứng chỉ Chạy sudo certbot renew, kiểm tra systemctl list-timers, test --dry-run
Cài xong website vẫn hiện “Not Secure” Mixed content: ảnh, script, CSS vẫn tải qua HTTP Sửa toàn bộ URL nội bộ sang HTTPS, xem tab Console (F12)
“No matching server block found” server_name chưa khai báo đúng tên miền Sửa server block / virtual host, reload web server, chạy lại Certbot

Chi tiết mọi lần chạy nằm ở /var/log/letsencrypt/letsencrypt.log. Đọc khoảng 20 dòng cuối thường đủ định vị lỗi: sudo tail -n 20 /var/log/letsencrypt/letsencrypt.log. Khi test cấu hình, thêm cờ --staging để xin chứng chỉ thử từ môi trường staging của Let’s Encrypt, không tính vào hạn mức thật. Danh sách giới hạn đầy đủ xem tại trang rate limits chính thức của Let’s Encrypt.

Kiểm tra SSL sau khi cài: SSL Labs, mixed content và redirect

Chứng chỉ hợp lệ chưa có nghĩa HTTPS đạt chuẩn. Ba bước kiểm tra dưới đây nên làm ngay sau khi cài xong.

Chấm điểm cấu hình bằng SSL Labs

Truy cập SSL Labs SSL Server Test, nhập tên miền và chờ vài phút. Mục tiêu tối thiểu là điểm A. Nếu thấy cảnh báo “chain incomplete”, bạn gần như đã dùng nhầm file cert.pem thay vì fullchain.pem. File chứa trọn chuỗi chứng chỉ luôn là fullchain.pem.

Xử lý mixed content

Mixed content xảy ra khi trang tải qua HTTPS nhưng vẫn gọi ảnh, CSS hoặc script qua HTTP; trình duyệt vẫn cảnh báo “Not Secure” dù chứng chỉ hợp lệ. Mở Developer Tools (F12), tab Console, tìm các dòng “Mixed Content” để định vị tài nguyên lỗi, sau đó sửa toàn bộ URL nội bộ sang HTTPS. Với WordPress, cập nhật WordPress Address và Site Address trong Settings, mục General trước, rồi rà tiếp trong theme và plugin.

Kiểm tra redirect trên cả www và non-www

curl -I http://tenmiencuaban.com
curl -I http://www.tenmiencuaban.com
curl -I https://tenmiencuaban.com

Hai lệnh đầu phải trả về 301 sang HTTPS; lệnh cuối trả về 200 OK. Cuối cùng, siết các khu vực nhạy cảm: với công cụ quản trị database như phpMyAdmin, hãy bắt buộc truy cập qua HTTPS và thêm lớp xác thực bên ngoài, chi tiết có trong bài cài phpMyAdmin quản lý MySQL trên VPS. Song song, định kỳ kiểm tra uy tín IP của VPS vì một IP dính danh sách đen ảnh hưởng trực tiếp đến email và dịch vụ bạn đang chạy, cách xử lý có trong hướng dẫn kiểm tra và khắc phục IP bị blacklist.

Câu hỏi thường gặp (FAQ)

1. Let’s Encrypt là gì và chứng chỉ có thật sự miễn phí không?

Let’s Encrypt là certificate authority phi lợi nhuận do ISRG vận hành, cấp chứng chỉ SSL/TLS miễn phí cho mọi người dùng tên miền. Chi phí bằng 0 là thật, bạn chỉ cần chứng minh quyền sở hữu domain. Mô hình được tài trợ bởi các tổ chức công nghệ lớn và đã hoạt động từ năm 2015.

2. Chứng chỉ Let’s Encrypt hết hạn sau bao lâu và có tự gia hạn không?

Mỗi chứng chỉ có hạn 90 ngày. Certbot cài bằng Snap tự tạo systemd timer chạy hai lần mỗi ngày và gia hạn tự động khi chứng chỉ còn dưới 30 ngày hạn. Bạn nên chạy certbot renew --dry-run ngay sau khi cài để xác nhận cơ chế tự động hoạt động đúng trước khi quyết định hoàn tất.

3. Cài SSL Let’s Encrypt cần những điều kiện gì?

Bạn cần tên miền đã trỏ A record về đúng IP VPS, port 80 và 443 mở trên firewall, web server Nginx hoặc Apache đang chạy với server block khai báo đúng server_name, và quyền sudo trên Ubuntu. Nếu dùng Cloudflare proxy, tạm chuyển sang DNS only trong lúc Certbot xác thực để tránh thất bại.

4. Certbot báo lỗi “challenge failed” phải làm sao?

Lỗi này nghĩa là Let’s Encrypt không truy cập được domain của bạn qua port 80. Kiểm tra theo thứ tự: A record đã trỏ đúng IP VPS chưa, firewall đã mở port 80 chưa, web server có đang chạy không, Cloudflare proxy có bật không. Chi tiết cụ thể nằm trong file /var/log/letsencrypt/letsencrypt.log.

5. Sau khi cài SSL xong, tại sao website vẫn hiện “Not Secure”?

Thường do mixed content: trang tải qua HTTPS nhưng vẫn gọi ảnh, script hoặc CSS qua HTTP, nên trình duyệt tiếp tục cảnh báo dù chứng chỉ hợp lệ. Mở Developer Tools (F12), xem tab Console để tìm tài nguyên lỗi, sau đó sửa toàn bộ URL nội bộ sang HTTPS và xóa cache trình duyệt.

Lời kết

Toàn bộ quy trình cài SSL Let’s Encrypt bằng Certbot xoay quanh ba điểm: tên miền phải trỏ A record về đúng IP VPS trước khi chạy lệnh, port 80 phải mở thông thoáng để HTTP-01 challenge đi qua, và auto-renew phải được kiểm chứng bằng certbot renew --dry-run ngay từ đầu. Đủ ba điều này, chứng chỉ sẽ tự động gia hạn khi còn dưới 30 ngày hạn mà bạn hầu như không phải đụng tay. Nếu chưa có môi trường để thực hành, một VPS Ubuntu giá rẻ với quyền root là đủ cho mọi bước trong bài, bạn có thể xem bảng giá VPS giá rẻ của Fast Byte và bắt tay vào làm ngay hôm nay.

Nội dung bài viết mang tính tham khảo. Các lệnh và cấu hình trong bài được kiểm chứng trên Ubuntu 20.04/22.04/24.04 LTS với quyền root hoặc sudo. Tùy phiên bản hệ điều hành, phiên bản Certbot, cấu hình web server và môi trường thực tế, kết quả có thể khác. Người đọc nên sao lưu file cấu hình, kiểm thử bằng cờ --staging hoặc --dry-run trước khi áp dụng cho hệ thống production. Thông tin chứng chỉ SSL Let’s Encrypt tham chiếu từ certbot.eff.org.

Chia sẻ: Facebook LinkedIn
Quay lại trang blog

Bài viết liên quan

cài đặt và sử dụng FastPanel
Hướng dẫn chung

[2026] FastPanel Là Gì? Tính Năng & Hướng Dẫn Cài Đặt, Sử Dụng FastPanel A-Z

FastPanel là gì đang là thắc mắc chung của rất nhiều quản trị viên website, lập trình viên và chủ shop trực tuyến khi bắt đầu chuyển hướng từ Shared Hosting sang máy chủ ảo riêng. Khát khao sở hữu hiệu năng vượt trội, tài nguyên độc lập từ VPS thường bị cản trở bởi […]

Thanh Lam Nguyễn
Đọc bài viết