Cài SSL Miễn Phí Let's Encrypt Trên VPS TrumVPS - HTTPS Cho Website Chỉ 5 Phút

📅 05/2026 · ⏱ 7 phút đọc · 🏷 Hướng Dẫn

Website của bạn đang chạy HTTP? Google Chrome đánh dấu "Không an toàn" và khách truy cập bỏ đi? Với Let's Encrypt, bạn có được chứng chỉ SSL hoàn toàn miễn phí, tự động gia hạn và được mọi trình duyệt tin tưởng. Cùng cài đặt ngay trên VPS TrumVPS!

SSL Là Gì? Tại Sao Cần HTTPS?

SSL/TLS mã hóa dữ liệu giữa trình duyệt người dùng và máy chủ, ngăn chặn hacker đánh cắp thông tin nhạy cảm. HTTPS (HTTP + SSL) mang lại:

Let's Encrypt Là Gì?

Let's Encrypt là tổ chức chứng thực số (CA) phi lợi nhuận, cung cấp chứng chỉ SSL/TLS miễn phí 100% cho mọi website. Được hỗ trợ bởi Google, Mozilla, Facebook, Cisco, Akamai... Chứng chỉ có hiệu lực 90 ngày và tự động gia hạn.

✅ Ưu điểm

  • Miễn phí vĩnh viễn
  • Cài đặt tự động qua Certbot
  • Tự động gia hạn
  • Được mọi trình duyệt tin tưởng
  • Hỗ trợ Wildcard SSL

⚠️ Nhược điểm

  • Hiệu lực ngắn (90 ngày)
  • Cần domain trỏ đến VPS
  • Không có bảo hành tài chính
  • Cần gia hạn định kỳ (tự động)

Yêu Cầu

Cài Đặt SSL Cho Nginx

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

Cập nhật hệ thống và cài Certbot plugin cho Nginx:

apt update && apt install -y certbot python3-certbot-nginx

Bước 2: Lấy Chứng Chỉ SSL

Chạy lệnh sau, thay yourdomain.com bằng tên miền của bạn:

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

Certbot sẽ tự động phát hiện cấu hình Nginx và hỏi bạn chọn redirect HTTP → HTTPS (nên chọn 2 - Redirect).

Bước 3: Kiểm Tra Chứng Chỉ

Truy cập https://yourdomain.com - nếu thấy ổ khóa xanh là thành công!

Kiểm tra điểm SSL tại: SSL Labs Test

Cài Đặt SSL Cho Apache

Với Apache, thay vì python3-certbot-nginx, dùng:

apt install -y python3-certbot-apache

Sau đó:

certbot --apache -d yourdomain.com -d www.yourdomain.com

Cấu Hình Tự Động Gia Hạn

Let's Encrypt có hiệu lực 90 ngày. Certbot tự động cài cron job để gia hạn:

systemctl status certbot.timer

Kiểm tra gia hạn thử (dry-run, không thực sự gia hạn):

certbot renew --dry-run

Nếu thấy "Congratulations, all renewals succeeded" là OK!

💡 Mẹo: Sau khi cài SSL, nhớ cập nhật URL trong WordPress (Settings → General) thành HTTPS và dùng plugin Really Simple SSL để tự động chuyển đổi nội dung.

Mở Port Firewall

ufw allow 80/tcp

ufw allow 443/tcp

ufw reload

Xử Lý Lỗi Thường Gặp

Thêm SSL Cho Nhiều Website (Virtual Host)

Nếu bạn host nhiều website trên cùng VPS:

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

Hoặc cài từng domain riêng biệt. Certbot sẽ tự động thêm cấu hình vào Nginx/Apache.

Wildcard SSL — Bảo Vệ Tất Cả Subdomain Cùng Lúc

Wildcard SSL bảo vệ domain chính + TẤT CẢ subdomain không giới hạn: *.yourdomain.com. Rất tiện khi bạn có nhiều subdomain (blog.domain.com, shop.domain.com, api.domain.com, cdn.domain.com...).

Let's Encrypt hỗ trợ wildcard SSL nhưng yêu cầu xác thực qua DNS-01 challenge (không dùng HTTP-01 như thông thường):

Bước 1: Cài Certbot với plugin DNS

Tùy vào DNS provider của bạn, cài plugin tương ứng. Ví dụ với Cloudflare:

apt install -y python3-certbot-dns-cloudflare

Một số plugin phổ biến:

Bước 2: Tạo API credentials

Ví dụ với Cloudflare: vào Dashboard → tạo API Token (quyền Zone:DNS:Edit) → lưu vào file:

# /root/.cloudflare.ini
dns_cloudflare_api_token = YOUR_CLOUDFLARE_API_TOKEN
chmod 600 /root/.cloudflare.ini  # Bảo mật file credentials

Bước 3: Lấy Wildcard Certificate

certbot certonly --dns-cloudflare \
  --dns-cloudflare-credentials /root/.cloudflare.ini \
  -d yourdomain.com -d *.yourdomain.com

Bước 4: Cấu hình Nginx dùng Wildcard SSL

server {
    listen 443 ssl http2;
    server_name yourdomain.com *.yourdomain.com;
    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
    # ... phần còn lại của config
}

Tự Động Gia Hạn & Monitoring

Cơ Chế Gia Hạn Tự Động

Certbot tự động tạo systemd timer (Ubuntu) hoặc cron job để gia hạn. Kiểm tra:

systemctl list-timers | grep certbot
# Output: certbot.timer — chạy 2 lần/ngày

Certbot chỉ thực sự gia hạn khi chứng chỉ còn dưới 30 ngày hiệu lực. Bạn có thể tùy chỉnh tần suất:

systemctl edit certbot.timer
# Thay đổi OnUnitActiveSec nếu cần

Monitoring Gia Hạn — Nhận Cảnh Báo Qua Email/Telegram

Tạo script kiểm tra và gửi cảnh báo nếu SSL sắp hết hạn:

#!/bin/bash
# /root/ssl-check.sh
DOMAINS=("yourdomain.com" "another.com")
ALERT_DAYS=14
for DOMAIN in "${DOMAINS[@]}"; do
  EXPIRY=$(echo | openssl s_client -servername $DOMAIN -connect $DOMAIN:443 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2)
  EXPIRY_EPOCH=$(date -d "$EXPIRY" +%s)
  NOW=$(date +%s)
  DAYS_LEFT=$(( ($EXPIRY_EPOCH - $NOW) / 86400 ))
  if [ $DAYS_LEFT -le $ALERT_DAYS ]; then
    echo "⚠️ SSL $DOMAIN hết hạn sau $DAYS_LEFT ngày!" | tee -a /var/log/ssl-alert.log
    # Thêm webhook Telegram hoặc sendmail tại đây
  fi
done
# Thêm vào crontab — chạy mỗi ngày
0 9 * * * /root/ssl-check.sh

Nâng Cao Bảo Mật SSL — HSTS, OCSP Stapling, TLS 1.3

HTTP Strict Transport Security (HSTS)

HSTS bắt buộc trình duyệt luôn dùng HTTPS (không bao giờ HTTP) cho domain của bạn. Thêm vào Nginx config:

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

⚠️ Cảnh báo: Khi bật HSTS preload, bạn không thể quay lại HTTP. Chỉ bật khi bạn CHẮC CHẮN luôn dùng HTTPS (bao gồm cả subdomain).

OCSP Stapling

OCSP Stapling giúp trình duyệt kiểm tra trạng thái thu hồi SSL nhanh hơn:

ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/yourdomain.com/chain.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;

TLS 1.3 (Nhanh & Bảo Mật Hơn)

ssl_protocols TLSv1.2 TLSv1.3;  # Tắt TLS 1.0, 1.1 (không an toàn)
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;  # Để client chọn cipher tối ưu

Full Nginx SSL Config (Best Practice)

server {
    listen 443 ssl http2;
    server_name yourdomain.com www.yourdomain.com;
    # SSL Certificates
    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/yourdomain.com/chain.pem;
    # Protocols & Ciphers
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    # OCSP Stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 valid=300s;
    # HSTS
    add_header Strict-Transport-Security "max-age=63072000" always;
    # Security Headers
    add_header X-Frame-Options DENY always;
    add_header X-Content-Type-Options nosniff always;
    add_header X-XSS-Protection "1; mode=block" always;
    root /var/www/yourdomain.com;
    index index.php index.html;
    # ... location blocks ...
}

So Sánh Let's Encrypt vs SSL Trả Phí

Tiêu chíLet's EncryptSSL Trả Phí (Comodo, DigiCert...)
GiáMiễn phí$10-500/năm
Hiệu lực90 ngày (tự động gia hạn)1-2 năm
Wildcard✅ Có (DNS-01)✅ Có
EV (Extended Validation)❌ Không (chỉ DV)✅ Có (hiển thị tên công ty)
Bảo hànhKhông$10K - $1.75M
Hỗ trợ kỹ thuậtCộng đồng24/7 phone/email
Độ tin cậy trình duyệt100% (mọi trình duyệt)100%

Kết luận: Với 99% website (blog, business, e-commerce nhỏ), Let's Encrypt là đủ. EV SSL chỉ cần cho ngân hàng, fintech, hoặc website lớn muốn hiển thị tên công ty xanh trên address bar. Bảo hành SSL hầu như không bao giờ claim được.

Câu Hỏi Thường Gặp (FAQ)

Let's Encrypt có an toàn như SSL trả phí không?

Có. Về mặt mã hóa, Let's Encrypt dùng cùng chuẩn với SSL trả phí (RSA 2048-bit hoặc ECDSA 256-bit). Trình duyệt không phân biệt. Khác biệt duy nhất là validation level (DV vs EV) và thời hạn.

90 ngày gia hạn một lần có phiền không?

Không. Certbot tự động gia hạn trước khi hết hạn. Bạn không phải làm gì cả. Nếu timer chạy đúng, bạn sẽ không bao giờ thấy SSL hết hạn. Tuy nhiên, NÊN cài monitoring để nhận cảnh báo phòng trường hợp timer bị lỗi.

Có giới hạn số lượng SSL không?

Có. Let's Encrypt giới hạn: 50 chứng chỉ/tuần/domain, 5 chứng chỉ/tuần cho cùng 1 set domain. Với cá nhân/doanh nghiệp nhỏ, bạn không bao giờ chạm giới hạn này. Chỉ các dịch vụ SSL-as-a-service mới cần quan tâm.

Tôi đổi VPS, làm sao chuyển SSL?

Copy thư mục /etc/letsencrypt/ từ VPS cũ sang VPS mới. Hoặc đơn giản hơn: chạy lại Certbot trên VPS mới sau khi DNS trỏ về IP mới. Let's Encrypt không giới hạn số lần cấp cho cùng domain (miễn là trong rate limit).

Cần VPS ổn định để cài SSL & host website?

TrumVPS - NVMe SSD, Anti-DDoS, Port 443 mở sẵn - Hoàn hảo cho web server!

Mã giảm giá: 42089QPI03TI (-9%)

THUÊ VPS NGAY