Cài SSL Let’s Encrypt miễn phí với Certbot trên Nginx

Cài SSL Let\'s Encrypt miễn phí với Certbot trên Nginx

Nếu bạn đang chạy website trên VPS hoặc Dedicated Server với Nginx và chưa có SSL, trong bài này, Cloud360 sẽ hướng dẫn toàn bộ quy trình từ đầu đến cuối gồm cài Certbot, lấy chứng chỉ, cấu hình HTTPS tự động, thiết lập gia hạn và xử lý các lỗi thường gặp. Làm theo đúng thứ tự, website của bạn sẽ có HTTPS hoạt động trong khoảng 10 phút.

Cài SSL Let\'s Encrypt miễn phí với Certbot trên Nginx

Let’s Encrypt và SSL miễn phí là gì?

Let’s Encrypt là một tổ chức chứng thực số (Certificate Authority) phi lợi nhuận, cung cấp chứng chỉ SSL/TLS miễn phí, tự động và được công nhận rộng rãi. Mỗi chứng chỉ có thời hạn 90 ngày, nhưng quá trình gia hạn có thể tự động hóa hoàn toàn, giúp website của bạn luôn được bảo mật mà không cần can thiệp thủ công.

Yêu Cầu Trước Khi Bắt Đầu

Trước khi chạy bất kỳ lệnh nào, hãy đảm bảo đủ điều kiện để tránh mất thời gian debug sau.

  • Hệ điều hành: Ubuntu 20.04 / 22.04 hoặc Debian 10/11 (bài này dùng Ubuntu 22.04)
  • Nginx đã được cài và đang chạy
  • Tên miền đã trỏ A record về đúng IP của server (DNS đã propagate)
  • Cổng 80 và 443 đang mở trên firewall
  • Quyền root hoặc user có sudo

Kiểm tra Nginx đang chạy:

sudo systemctl status nginx

Kiểm tra domain đã trỏ đúng IP chưa:

dig +short yourdomain.com

Kết quả trả về phải là IP của server bạn đang dùng. Nếu DNS chưa propagate, chờ thêm trước khi tiếp tục vì Certbot sẽ không cấp chứng chỉ nếu domain không trỏ đúng.

Bước 1: Cài Đặt Certbot

Certbot được phát triển bởi Electronic Frontier Foundation (EFF) và là công cụ chính thức để tương tác với Let’s Encrypt. Cài đặt trên Ubuntu 22.04 qua snap là cách được khuyến nghị hiện tại vì luôn nhận phiên bản mới nhất.

Cài snapd và Certbot:

sudo apt update

sudo apt install snapd -y

sudo snap install --classic certbot

Tạo symlink để dùng lệnh certbot trực tiếp:

sudo ln -s /snap/bin/certbot /usr/bin/certbot

Kiểm tra Certbot đã cài thành công:

certbot --version

Kết quả trả về dạng certbot 2.x.x là thành công.

Bước 2: Mở Cổng Firewall

Certbot cần cổng 80 để xác minh domain và cổng 443 để HTTPS hoạt động. Nếu bạn đang dùng UFW, mở hai cổng này trước khi chạy Certbot.

sudo ufw allow 'Nginx Full'

sudo ufw status

Nginx Full bao gồm cả cổng 80 (HTTP) và 443 (HTTPS). Nếu trước đó bạn chỉ mở Nginx HTTP, xóa rule cũ đi:

sudo ufw delete allow 'Nginx HTTP'

Bước 3: Cấu Hình Server Block Nginx

Certbot cần đọc được tên miền trong cấu hình Nginx để tự động cấu hình HTTPS. Đảm bảo server block của bạn có đúng server_name.

Kiểm tra hoặc tạo file cấu hình cho domain:

sudo nano /etc/nginx/sites-available/yourdomain.com

Nội dung tối thiểu cần có:

server {

    listen 80;

    server_name yourdomain.com www.yourdomain.com;

 

    root /var/www/yourdomain.com/html;

    index index.html index.php;

 

    location / {

        try_files $uri $uri/ =404;

    }

}

Kích hoạt site và kiểm tra cấu hình:

sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/

sudo nginx -t

sudo systemctl reload nginx

Lệnh nginx -t phải trả về syntax is oktest is successful mới tiếp tục bước tiếp theo.

Bước 4: Lấy Chứng Chỉ SSL và Cấu Hình HTTPS Tự Động

Đây là bước quan trọng nhất. Certbot plugin Nginx sẽ tự lấy chứng chỉ từ Let’s Encrypt và chỉnh sửa cấu hình Nginx để bật HTTPS.

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

Certbot sẽ hỏi một số thông tin:

Enter email address (used for urgent renewal and security notices):

→ Nhập email của bạn để nhận thông báo khi chứng chỉ sắp hết hạn

(A)gree/(C)ancel:

→ Nhập A để đồng ý điều khoản dịch vụ của Let’s Encrypt

(Y)es/(N)o:

→ Chọn Y hoặc N tùy bạn có muốn nhận email từ EFF không (không ảnh hưởng đến chứng chỉ)

Nếu thành công, Certbot tự động:

  • Lấy chứng chỉ SSL từ Let’s Encrypt
  • Chỉnh sửa file cấu hình Nginx để bật HTTPS trên cổng 443
  • Thêm redirect tự động từ HTTP sang HTTPS
  • Lưu chứng chỉ vào /etc/letsencrypt/live/yourdomain.com/

Kết quả thành công trông như sau:

Successfully received certificate.

Certificate is saved at: /etc/letsencrypt/live/yourdomain.com/fullchain.pem

Key is saved at:         /etc/letsencrypt/live/yourdomain.com/privkey.pem

This certificate expires on 2026-07-01.

Bước 5: Xác Nhận Cấu Hình Nginx Sau Khi Cài SSL

Sau khi Certbot chạy xong, file cấu hình Nginx được chỉnh sửa tự động. Nên xem lại để hiểu những gì đã thay đổi.

sudo cat /etc/nginx/sites-available/yourdomain.com

File sẽ trông tương tự như sau:

server {

    listen 80;

    server_name yourdomain.com www.yourdomain.com;

    return 301 https://$host$request_uri;

}

 

server {

    listen 443 ssl;

    server_name yourdomain.com www.yourdomain.com;

 

    root /var/www/yourdomain.com/html;

    index index.html index.php;

 

    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;

    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

    include /etc/letsencrypt/options-ssl-nginx.conf;

    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

 

    location / {

        try_files $uri $uri/ =404;

    }

}

Kiểm tra và reload Nginx:

sudo nginx -t && sudo systemctl reload nginx

Bước 6: Kiểm Tra SSL Đã Hoạt Động

Sau khi cài xong, kiểm tra SSL đang hoạt động đúng trước khi kết thúc.

Kiểm tra trên trình duyệt: Truy cập https://yourdomain.com, biểu tượng ổ khóa xuất hiện trên thanh địa chỉ là thành công. Thử truy cập http://yourdomain.com để kiểm tra redirect về HTTPS có hoạt động không.

Kiểm tra bằng curl:

curl -I http://yourdomain.com

Kết quả phải trả về 301 Moved Permanently với header Location: https://yourdomain.com.

Kiểm tra điểm bảo mật với SSL Labs: Vào https://www.ssllabs.com/ssltest/, nhập tên miền và chạy test. Cấu hình Let’s Encrypt với Certbot trên Nginx thường đạt điểm A hoặc A+ ngay từ đầu nhờ file options-ssl-nginx.conf của Certbot đã cấu hình TLS 1.2/1.3 và cipher suite an toàn.

Bước 7: Cấu Hình Tự Động Gia Hạn SSL

Chứng chỉ Let’s Encrypt có hiệu lực 90 ngày. Certbot tự động cài một systemd timer để gia hạn trước khi hết hạn, không cần bạn làm gì.

Kiểm tra timer đã được cài chưa:

sudo systemctl status snap.certbot.renew.timer

Kiểm tra thử quy trình gia hạn có hoạt động không:

sudo certbot renew --dry-run

Lệnh --dry-run giả lập quá trình gia hạn mà không thực sự lấy chứng chỉ mới. Kết quả trả về Congratulations, all simulated renewals succeeded là hoàn tất.

Certbot sẽ tự gia hạn khi chứng chỉ còn dưới 30 ngày, chạy hai lần mỗi ngày vào giờ ngẫu nhiên để phân tán tải cho server Let’s Encrypt.

Xử lý lỗi thường gặp

Dưới đây là các lỗi phổ biến nhất khi cài SSL với Certbot và cách xử lý nhanh.

Xử lý lỗi thường gặp

Lỗi: Could not bind to IPv4/IPv6

Certbot cần dùng cổng 80 để xác minh domain nhưng Nginx đang chiếm cổng này. Giải pháp là dùng plugin Nginx thay vì standalone:

sudo certbot --nginx -d yourdomain.com

Plugin Nginx không cần tắt Nginx, xử lý trực tiếp qua cấu hình.

Lỗi: DNS problem: NXDOMAIN looking up A for yourdomain.com

Domain chưa trỏ về IP của server hoặc DNS chưa propagate. Kiểm tra lại A record và chờ thêm 15-30 phút rồi chạy lại.

Lỗi: too many certificates already issued for yourdomain.com

Let’s Encrypt giới hạn 5 chứng chỉ cho cùng một domain trong 7 ngày. Nếu bạn đã chạy lệnh certbot nhiều lần do lỗi, dùng flag –staging để test trước:

sudo certbot --nginx --staging -d yourdomain.com

Lỗi Mixed Content sau khi cài SSL

Website đã có HTTPS nhưng một số tài nguyên (ảnh, CSS, JS) vẫn load qua HTTP. Nếu dùng WordPress, cài plugin Really Simple SSL để tự động fix, hoặc thêm vào cấu hình Nginx:

add_header Content-Security-Policy "upgrade-insecure-requests";

Chứng chỉ không tự gia hạn được

Kiểm tra log gia hạn:

sudo journalctl -u snap.certbot.renew.service

Nguyên nhân thường gặp là cổng 80 bị chặn bởi firewall vào thời điểm gia hạn, hoặc cấu hình Nginx có lỗi. Sửa lỗi và chạy certbot renew --dry-run lại để xác nhận.

Tối ưu thêm sau khi cài ssl

Sau khi SSL hoạt động, có thể thêm một số cấu hình để tăng điểm bảo mật.

Bật HSTS (HTTP Strict Transport Security)

HSTS yêu cầu trình duyệt luôn dùng HTTPS khi truy cập domain, ngăn tấn công SSL stripping. Thêm vào server block HTTPS trong Nginx:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

Bật OCSP Stapling

Giúp trình duyệt xác minh tính hợp lệ của chứng chỉ nhanh hơn mà không cần kết nối đến CA:

ssl_stapling on;

ssl_stapling_verify on;

resolver 8.8.8.8 8.8.4.4 valid=300s;

resolver_timeout 5s;

Sau khi thêm, reload Nginx và kiểm tra lại điểm trên SSL Labs để xác nhận đã đạt A+.

Vậy là trên đây Cloud360 đã hướng xong cách cài SSL Let’s Encrypt miễn phí với Certbot trên Nginx. Chúc bạn thành công!

Bài viết liên quan

Cài SSL Let’s Encrypt miễn phí với Certbot trên Nginx

Cài SSL Let’s Encrypt miễn phí với Certbot trên Nginx

Hướng dẫn Cài SSL Let's Encrypt miễn phí với Certbot trên Nginx, chi tiết toàn bộ quy trình từ đầu đến cuối. Xem ngay!

Nguyễn Ngọc ThưTháng 4 17, 2026
SSL là gì? Tất tần tật về chứng chỉ ssl cho người mới bắt đầu

SSL là gì? Tất tần tật về chứng chỉ ssl cho người mới bắt đầu

SSL (Secure Sockets Layer) là giao thức bảo mật tạo ra một kênh truyền dữ liệu được mã hóa giữa máy chủ web và trình duyệt.

Nguyễn Ngọc ThưTháng 4 16, 2026
Email là gì? Tất tần tật về Thư điện tử cho người mới 

Email là gì? Tất tần tật về Thư điện tử cho người mới 

Email (Electronic Mail) là thư điện tử, cho phép gửi và nhận tin nhắn, tài liệu, hình ảnh qua Internet đến bất kỳ ai có địa chỉ email, gần như tức thì

Nguyễn Ngọc ThưTháng 4 16, 2026
Data Center là gì? Tổng quan từ A – Z về trung tâm dữ liệu

Data Center là gì? Tổng quan từ A – Z về trung tâm dữ liệu

Data center (trung tâm dữ liệu - DC) là một tòa nhà, cơ sở vật lý được xây dựng chuyên biệt để lắp đặt, vận hành và bảo vệ hệ thống máy chủ

Nguyễn Ngọc ThưTháng 4 13, 2026
Dedicated Server là gì? Ưu – Nhược điểm? Nên dùng khi nào?

Dedicated Server là gì? Ưu – Nhược điểm? Nên dùng khi nào?

Dedicated Server là máy chủ vật lý riêng đặt tại Datacenter, được cho thuê toàn bộ tài nguyên và chỉ phục vụ duy nhất một khách hàng

Nguyễn Ngọc ThưTháng 4 13, 2026
cPanel là gì? Hướng Dẫn Sử Dụng Từ A Đến Z Cho Người Mới

cPanel là gì? Hướng Dẫn Sử Dụng Từ A Đến Z Cho Người Mới

cPanel là phần mềm web hosting control panel chạy trên Linux, cung cấp giao diện đồ họa để quản lý toàn bộ tài nguyên hosting

Nguyễn Ngọc ThưTháng 4 8, 2026
DirectAdmin là gì? Hướng dẫn chi tiết cho người mới bắt đầu

DirectAdmin là gì? Hướng dẫn chi tiết cho người mới bắt đầu

DirectAdmin (DA) là bảng điều khiển web hosting (control panel) chạy trên Linux, giúp quản lý server qua giao diện đồ họa trực quan mà không cần lệnh dòng lệnh

Nguyễn Ngọc ThưTháng 4 8, 2026
Hosting Control Panel là gì? Tìm hiểu về bảng điều khiển Hosting

Hosting Control Panel là gì? Tìm hiểu về bảng điều khiển Hosting

Hosting Control Panel là một phần mềm cung cấp giao diện đồ họa (GUI) trên nền tảng web, giúp người dùng quản lý hosting, email, tên miền, file và cơ sở dữ liệu

Nguyễn Ngọc ThưTháng 4 8, 2026
Cloud Hosting Là Gì? So Sánh Với VPS Và Shared Hosting

Cloud Hosting Là Gì? So Sánh Với VPS Và Shared Hosting

Cloud Hosting (lưu trữ đám mây) là hình thức hosting trong đó website của bạn không chạy trên một máy chủ vật lý duy nhất, mà được phân phối trên một mạng lưới nhiều máy chủ kết nối với nhau - gọi là hạ tầng đám mây.

Nguyễn Ngọc ThưTháng 4 7, 2026
Hosting nước ngoài là gì? Có nên dùng cho website của bạn?

Hosting nước ngoài là gì? Có nên dùng cho website của bạn?

Hosting nước ngoài là dịch vụ web hosting do nhà cung cấp nước ngoài vận hành, với máy chủ đặt tại các quốc gia như Mỹ, Singapore, Hà Lan,...

Nguyễn Ngọc ThưTháng 4 3, 2026