Cách phổ biến để cài SSL trên VPS là dùng chứng chỉ miễn phí của Let’s Encrypt với công cụ Certbot. Bạn trỏ tên miền về IP của VPS, mở cổng 80 và 443, cài Certbot rồi chạy certbot --nginx (hoặc --apache). Certbot tự xin chứng chỉ, sửa cấu hình web server và đặt lịch gia hạn, nên website có HTTPS chỉ sau vài lệnh.
- Chứng chỉ Let’s Encrypt có hiệu lực mặc định 90 ngày và được Certbot gia hạn tự động; kiểm tra bằng
sudo certbot renew --dry-run. - Cần chứng chỉ xác thực doanh nghiệp (OV/EV) hoặc có bảo hành: dùng chứng chỉ SSL trả phí, tạo CSR trên VPS rồi ghép chain khi cài.
- Đang dùng control panel như aaPanel, CyberPanel: cài SSL ngay trong panel, không cần chạy Certbot riêng.
Bài này là một bước trong lộ trình cách sử dụng VPS cho người mới. Các lệnh dưới đây chạy trên Ubuntu 24.04 LTS, đăng nhập bằng user có quyền sudo.
Cần chuẩn bị gì trước khi cài SSL trên VPS?
Trước khi chạy Certbot, bạn cần ba thứ: tên miền đã trỏ đúng về IP của VPS, cổng 80 và 443 mở từ Internet. Thứ ba là web server (Nginx hoặc Apache) đang chạy với khai báo đúng tên miền. Thiếu một trong ba, Let’s Encrypt sẽ không xác thực được tên miền và từ chối cấp chứng chỉ.
- DNS trỏ đúng: bản ghi A trỏ về IPv4 của VPS. Nếu có bản ghi AAAA (IPv6) thì cũng phải trỏ đúng IPv6 của VPS, vì Let’s Encrypt có thể kiểm tra qua IPv6. Xem cách trỏ tên miền về VPS.
- Cổng 80 mở: kiểu xác thực HTTP-01 mà Certbot dùng mặc định chỉ chạy trên cổng 80, không đổi được sang cổng khác (Let’s Encrypt). Cổng 443 cần mở để người dùng truy cập HTTPS.
- Web server có server block (Nginx) hoặc virtual host (Apache) khai báo
server_name/ServerNamelà tên miền của bạn. Xem thêm Nginx là gì.
Kiểm tra nhanh trên VPS (thay tenmien.vn bằng tên miền của bạn):
# IP mà tên miền đang trỏ tới, phải trùng IP của VPS
dig +short tenmien.vn A
dig +short tenmien.vn AAAA
# Mở cổng web trên UFW (profile có sẵn khi đã cài Nginx)
sudo ufw allow 'Nginx Full'
sudo ufw status
Nếu dùng Apache, profile tương ứng là 'Apache Full'. Nếu chưa bật UFW, hãy mở cổng SSH trước rồi mới chạy sudo ufw enable để không tự khóa mình khỏi VPS.
Cách cài SSL Let’s Encrypt cho Nginx trên Ubuntu 24.04
Theo hướng dẫn chính thức của Certbot, cách cài được khuyến nghị là gói snap. Gỡ bản Certbot cũ cài bằng apt (nếu có), cài Certbot bằng snap, tạo lối tắt lệnh, rồi chạy certbot --nginx. Bản Ubuntu Server 24.04 chuẩn có sẵn snapd. Nếu lệnh snap không có (một số mẫu VPS đã gỡ snapd), cài bằng sudo apt install snapd. Nếu muốn hiểu Certbot làm gì trước khi chạy, xem bài Certbot là gì.

Bước 1: Cài Certbot
# Gỡ bản Certbot cài bằng apt nếu có, tránh trùng hai bản
sudo apt remove certbot
# Cài Certbot bằng snap và tạo lối tắt lệnh
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/local/bin/certbot
Bước 2: Xin và cài chứng chỉ
# Certbot đọc server_name trong cấu hình Nginx, xin chứng chỉ và tự sửa cấu hình
sudo certbot --nginx
# Hoặc chỉ định rõ tên miền
sudo certbot --nginx -d tenmien.vn -d www.tenmien.vn
Lần đầu chạy, Certbot hỏi email (dùng cho tài khoản và thông báo quan trọng, có thể bỏ trống) và yêu cầu đồng ý điều khoản. Let’s Encrypt đã ngừng gửi email nhắc hết hạn từ ngày 04/06/2025 (Let’s Encrypt). Vì vậy hãy tự đặt cảnh báo bằng một dịch vụ giám sát chứng chỉ hoặc giám sát uptime.
Nếu muốn tự sửa cấu hình Nginx, dùng sudo certbot certonly --nginx: Certbot chỉ lấy chứng chỉ, lưu ở /etc/letsencrypt/live/tenmien.vn/ với fullchain.pem và privkey.pem (tài liệu Certbot).
Bước 3: Kiểm tra
# Danh sách chứng chỉ Certbot đang quản lý, kèm ngày hết hạn
sudo certbot certificates
# Kiểm tra cấu hình Nginx sau khi Certbot sửa
sudo nginx -t
Mở https://tenmien.vn trên trình duyệt và xem biểu tượng ổ khóa. Hãy thử cả bản có và không có www, vì mỗi tên phải nằm trong chứng chỉ.
Cài SSL Let’s Encrypt cho Apache có gì khác?
Với Apache, các bước giống Nginx, chỉ thay plugin: chạy sudo certbot --apache thay cho --nginx (hướng dẫn Certbot cho Apache). Certbot đọc ServerName và ServerAlias trong virtual host, tạo thêm file cấu hình cổng 443 và có thể bật chuyển hướng HTTP sang HTTPS.
sudo apt remove certbot # gỡ bản cài bằng apt nếu có
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/local/bin/certbot
sudo ufw allow 'Apache Full'
sudo certbot --apache -d tenmien.vn -d www.tenmien.vn
sudo apache2ctl configtest
Nếu chưa rõ nên chọn web server nào, xem Apache là gì và so sánh với Nginx.
Chứng chỉ Let’s Encrypt có hiệu lực bao lâu và gia hạn thế nào?
Chứng chỉ Let’s Encrypt mặc định có hiệu lực 90 ngày (FAQ Let’s Encrypt). Certbot cài kèm một tác vụ chạy định kỳ (systemd timer hoặc cron) để tự gia hạn. Vì vậy bạn không cần gia hạn bằng tay. Việc của bạn là kiểm tra tác vụ đó chạy được, và kiểm tra lại mỗi khi đổi cấu hình web server hoặc DNS.
# Chạy thử gia hạn, không lưu chứng chỉ thật
sudo certbot renew --dry-run
# Xem lịch chạy tự động (bản snap có timer snap.certbot.renew)
systemctl list-timers | grep certbot
Từ Certbot 4.0, chứng chỉ được gia hạn khi còn dưới 1/3 thời hạn; với chứng chỉ 90 ngày là khoảng 30 ngày cuối (tài liệu Certbot). Nếu --dry-run báo lỗi, gia hạn thật cũng sẽ lỗi: xử lý ngay thay vì đợi chứng chỉ hết hạn.
Mốc Thời hạn chứng chỉ mặc định (profile classic) Bạn cần làm gì Hiện tại (10/2026) 90 ngày Giữ gia hạn tự động, kiểm tra bằng --dry-runTừ 10/02/2027 64 ngày Không cần đổi gì nếu gia hạn tự động theo tỷ lệ thời hạn Từ 16/02/2028 45 ngày Không tự viết cron gia hạn cố định mỗi 60 ngày; dùng certbot renew mặc định và đặt giám sát hết hạn riêng (Let’s Encrypt không còn gửi email nhắc)
Lý do của bảng trên: Let’s Encrypt cho biết lịch gia hạn cố định 60 ngày sẽ không còn đủ khi chứng chỉ chỉ còn 45 ngày. Nếu bạn từng tự viết cron chạy Certbot theo số ngày cố định, hãy đổi về certbot renew mặc định.
Cách cài SSL trả phí trên VPS (tạo CSR, ghép chain)
Với chứng chỉ trả phí, bạn tự tạo private key và CSR (yêu cầu ký chứng chỉ) trên VPS rồi gửi CSR cho nhà cung cấp chứng chỉ (CA) để xác thực. Sau đó bạn nhận về file chứng chỉ và các chứng chỉ trung gian. Bước dễ sai nhất là ghép chain: chứng chỉ của tên miền phải đứng trước chứng chỉ trung gian.

Bước 1: Tạo private key và CSR
sudo mkdir -p /etc/ssl/tenmien.vn && cd /etc/ssl/tenmien.vn
sudo openssl req -new -newkey rsa:2048 -nodes \
-keyout tenmien.vn.key -out tenmien.vn.csr
sudo chmod 600 tenmien.vn.key
Lệnh hỏi thông tin quốc gia, tổ chức và Common Name: nhập đúng tên miền cần bảo vệ. Gửi file .csr cho nhà cung cấp chứng chỉ; file .key giữ trên VPS, không gửi cho ai. Với chứng chỉ DV, CA chỉ xác thực quyền sở hữu tên miền (qua email, bản ghi DNS hoặc file); OV và EV cần thêm hồ sơ doanh nghiệp.
Bước 2: Ghép chain và khai báo
Theo tài liệu Nginx, nối chứng chỉ tên miền với bundle của CA thành một file, chứng chỉ tên miền đứng trước. Ghép sai thứ tự, Nginx báo lỗi key values mismatch và không khởi động.
# Nginx: ghép chứng chỉ tên miền + bundle trung gian
sudo sh -c 'cat tenmien.vn.crt ca-bundle.crt > tenmien.vn.chained.crt'
# Trong server block cổng 443
listen 443 ssl;
server_name tenmien.vn www.tenmien.vn;
ssl_certificate /etc/ssl/tenmien.vn/tenmien.vn.chained.crt;
ssl_certificate_key /etc/ssl/tenmien.vn/tenmien.vn.key;
# Kiểm tra rồi nạp lại
sudo nginx -t && sudo systemctl reload nginx
Với Apache 2.4.8 trở lên, đặt chứng chỉ tên miền và các chứng chỉ trung gian (theo thứ tự từ tên miền lên gốc) trong cùng file khai báo ở SSLCertificateFile. Chỉ thị SSLCertificateChainFile đã lỗi thời (tài liệu mod_ssl).
Từ 15/03/2026, chứng chỉ SSL công khai, kể cả chứng chỉ trả phí, chỉ được cấp tối đa 200 ngày. Mức này giảm còn 100 ngày từ 15/03/2027 và 47 ngày từ 15/03/2029, theo Baseline Requirements của CA/Browser Forum (Ballot SC-081). Gói mua theo năm vì vậy phải cấp lại và cài lại chứng chỉ trong kỳ. Nếu CA hỗ trợ ACME, hãy dùng ACME để tự động hoá thay vì nhắc lịch bằng tay.
Tino có bán chứng chỉ SSL Sectigo (theo trang sản phẩm ngày 19/10/2026). Nếu chưa rõ khác biệt giữa các loại chứng chỉ, đọc SSL certificate là gì.
Cài SSL qua control panel (aaPanel, CyberPanel)
Nếu VPS đã cài control panel, hãy cài SSL ngay trong panel thay vì chạy Certbot riêng. Panel tự xin chứng chỉ Let’s Encrypt, sửa cấu hình web server mà nó quản lý và tự gia hạn. Chạy thêm Certbot trên cùng tên miền dễ làm hai công cụ ghi đè cấu hình của nhau.
- aaPanel: xem cách cài aaPanel trên VPS và cách cài SSL miễn phí trên aaPanel. Sau khi cấp chứng chỉ, bật tùy chọn ép chuyển sang HTTPS cho website.
- CyberPanel: cấp SSL cho từng website trong mục quản lý SSL, theo hướng dẫn chính thức của CyberPanel. Tài liệu này cũng nêu điều kiện tên miền phải trỏ về máy chủ và cổng 80, 443 phải mở.
Lỗi thường gặp khi cài SSL trên VPS và cách xử lý
Phần lớn lỗi khi cài SSL trên VPS rơi vào ba nhóm: DNS chưa trỏ đúng, cổng 80 bị chặn khiến Let’s Encrypt không xác thực được. Nhóm thứ ba là trang HTTPS còn tải tài nguyên qua HTTP (mixed content). Đọc kỹ thông báo lỗi của Certbot, vì nó thường nêu tên miền và kiểu xác thực bị lỗi.
Dấu hiệu Nguyên nhân thường gặp Cách xử lý Certbot báo NXDOMAIN hoặc unauthorized, xác thực sai IPTên miền chưa trỏ về VPS, DNS chưa cập nhật, hoặc bản ghi AAAA trỏ sai Kiểm tra bằng dig; sửa hoặc xoá bản ghi AAAA sai; đợi TTL hết rồi chạy lạiCertbot báo Timeout during connectCổng 80 bị chặn bởi UFW, tường lửa của nhà cung cấp, hoặc web server không chạy Mở cổng 80 ( sudo ufw status), kiểm tra sudo ss -tlnp | grep :80Trình duyệt vẫn báo “không an toàn” dù đã có chứng chỉ Mixed content: trang HTTPS tải ảnh, script qua http:// (web.dev)Đổi URL trong nội dung và cài đặt website sang https://; với WordPress xem cách chuyển HTTP sang HTTPSChứng chỉ chạy trên máy tính nhưng lỗi trên một số điện thoại, ứng dụng Thiếu chứng chỉ trung gian (chain) khi cài SSL trả phí Ghép lại file chain đúng thứ tự như phần trên Website báo chứng chỉ hết hạn Gia hạn tự động lỗi sau khi đổi cấu hình, DNS hoặc chặn cổng 80 Chạy sudo certbot renew --dry-run, sửa lỗi được báo rồi chạy sudo certbot renew
Các lỗi phía trình duyệt khác: lỗi SSL handshake failed.
Khi nào không nên tự cài Certbot trên VPS?
Không phải VPS nào cũng nên tự cài Certbot. Nếu một thành phần khác đã quản lý chứng chỉ cho tên miền, cài thêm Certbot chỉ tạo thêm một nguồn cấu hình dễ xung đột. Cũng có trường hợp chứng chỉ miễn phí không đáp ứng yêu cầu của bạn.
- VPS đã có control panel quản lý SSL (aaPanel, CyberPanel, DirectAdmin…): dùng chức năng SSL của panel.
- Ứng dụng chạy trong Docker sau một reverse proxy tự cấp chứng chỉ (ví dụ Caddy, Traefik): reverse proxy đã lo phần SSL.
- Cần chứng chỉ OV/EV hoặc chính sách bảo hành: Let’s Encrypt chỉ cấp chứng chỉ xác thực tên miền (DV); hãy dùng chứng chỉ trả phí.
- Tên miền đặt sau CDN có bật proxy: trình duyệt nhận chứng chỉ của CDN, còn chứng chỉ trên VPS chỉ dùng cho đoạn CDN tới VPS. Chọn chế độ SSL của CDN trước khi cài, để tránh lỗi chuyển hướng vòng lặp.
Cài SSL trên VPS tại Tino
Các gói VPS NVMe tại Tino có toàn quyền root, nên bạn cài Certbot hoặc chứng chỉ trả phí theo đúng các bước trên. Theo trang sản phẩm (19/10/2026), Tino hỗ trợ kỹ thuật 24/7 và tặng 1 tháng sử dụng nếu thời gian tiếp nhận hỗ trợ kỹ thuật quá 5 phút.
Sau khi có HTTPS, bước tiếp theo nên làm là rà checklist bảo mật VPS. Nếu mới bắt đầu, đọc lại VPS là gì để chọn cấu hình phù hợp.
Câu hỏi thường gặp về cài SSL trên VPS
Cài SSL cho VPS có mất phí không?
Không bắt buộc. Chứng chỉ Let’s Encrypt miễn phí và đủ để website chạy HTTPS. Bạn chỉ trả phí khi cần chứng chỉ xác thực tổ chức (OV/EV), chứng chỉ có bảo hành hoặc cần hỗ trợ từ nhà cung cấp chứng chỉ.
SSL miễn phí có bảo mật kém hơn SSL trả phí không?
Về mã hoá đường truyền thì không khác: cả hai đều dùng cùng giao thức TLS. Khác biệt nằm ở mức xác thực (DV chỉ xác thực tên miền, OV/EV xác thực thêm doanh nghiệp), chính sách bảo hành và kênh hỗ trợ. Thời hạn tối đa của mọi chứng chỉ công khai đều đang giảm dần, nên tự động gia hạn quan trọng với cả hai loại.
Let's Encrypt có cấp chứng chỉ wildcard (*.tenmien.vn) không?
Có, nhưng phải xác thực bằng bản ghi DNS (DNS-01); cách xác thực qua cổng 80 (HTTP-01) không cấp được wildcard (Let’s Encrypt). Với Certbot, bạn dùng plugin DNS của nhà cung cấp DNS hoặc chế độ manual. Xem thêm wildcard SSL là gì.
Có cài SSL cho địa chỉ IP của VPS (không có tên miền) được không?
Từ 15/01/2026, Let’s Encrypt cấp chứng chỉ cho địa chỉ IP, nhưng chỉ ở dạng ngắn hạn khoảng 6 ngày (160 giờ) và phải chọn profile shortlived (thông báo của Let’s Encrypt). Với website, dùng tên miền vẫn đơn giản hơn.
Một VPS cài được SSL cho nhiều tên miền không?
Được. Mỗi tên miền (hoặc mỗi website) có server block hoặc virtual host riêng, và bạn chạy Certbot với các tham số -d tương ứng. Một chứng chỉ cũng có thể chứa nhiều tên miền nếu bạn liệt kê tất cả trong cùng một lệnh.
Chứng chỉ SSL hết hạn thì website bị gì?
Trình duyệt hiện cảnh báo bảo mật toàn trang và nhiều người dùng sẽ rời đi; ứng dụng, API gọi tới website có thể ngừng kết nối. Website vẫn chạy, nhưng hãy gia hạn ngay bằng sudo certbot renew rồi tìm nguyên nhân gia hạn tự động bị lỗi.
Nguồn tham khảo
- Certbot: hướng dẫn cho Nginx trên Linux (snap) (truy cập 19/10/2026)
- Certbot: hướng dẫn cho Apache trên Linux (snap) (truy cập 19/10/2026)
- Certbot User Guide (truy cập 19/10/2026)
- Let’s Encrypt: FAQ (truy cập 19/10/2026)
- Let’s Encrypt: Decreasing Certificate Lifetimes to 45 Days (truy cập 19/10/2026)
- Let’s Encrypt: Challenge Types (truy cập 19/10/2026)
- Let’s Encrypt: Expiration Notification Service Has Ended (truy cập 19/10/2026)
- CA/Browser Forum: Baseline Requirements for TLS Server Certificates (mục 1.2.2, 6.3.2) (truy cập 19/10/2026)
- CA/Browser Forum: Ballot SC-081v3 (truy cập 19/10/2026)
- nginx: Configuring HTTPS servers (truy cập 19/10/2026)
- Apache HTTP Server: mod_ssl (truy cập 19/10/2026)
- web.dev: What is mixed content? (truy cập 19/10/2026)
- CyberPanel: How to Issue SSL in CyberPanel (truy cập 19/10/2026)
