Cài HTTPS miễn phí với Let's Encrypt và Nginx

  • author-image

    Nguyễn Đình Cường

  • blog-tag
  • blog-comment 0 comment
  • created-date 09 Nov, 2026
blog-thumbnail

Trình duyệt hiện đánh dấu các trang không dùng HTTPS là 'không an toàn', và nhiều tính năng web chỉ hoạt động trên kết nối bảo mật. Tin vui là bạn có thể có chứng chỉ SSL miễn phí, tự động gia hạn, chỉ sau vài phút với Let's Encrypt và Certbot.

HTTPS và chứng chỉ SSL/TLS

HTTPS là HTTP chạy trên lớp mã hóa TLS. Nó đảm bảo ba điều: dữ liệu giữa trình duyệt và máy chủ được mã hóa, không bị sửa giữa đường, và trình duyệt xác nhận đúng là bạn đang nói chuyện với trang thật. Để làm được vậy, máy chủ cần một chứng chỉ do tổ chức phát hành đáng tin cậy (CA) cấp. Let's Encrypt là CA cấp chứng chỉ miễn phí và tự động.

Điều kiện cần có

  • Một tên miền đã trỏ bản ghi DNS (A hoặc AAAA) về địa chỉ IP máy chủ.
  • Nginx đã chạy và phục vụ được trang qua HTTP ở cổng 80.
  • Tường lửa mở cổng 80 và 443.
  • Quyền sudo trên máy chủ.

Bước 1: kiểm tra cấu hình Nginx

Khối server cần có đúng server_name để Certbot nhận ra:

server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/example;
}

Bước 2: cài Certbot và lấy chứng chỉ

Cách cài khác nhau tùy bản phân phối. Trên Ubuntu/Debian, bạn có thể dùng gói có sẵn:

sudo apt update
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com

Certbot sẽ hỏi email để nhắc gia hạn, yêu cầu đồng ý điều khoản, rồi hỏi có chuyển hướng toàn bộ HTTP sang HTTPS không. Bạn nên chọn có. Công cụ tự sửa cấu hình Nginx giúp bạn. Hãy xem tài liệu chính thức của Certbot nếu hệ điều hành bạn dùng cách cài khác.

Cấu hình sau khi Certbot xử lý

Bạn sẽ thấy cấu hình có dạng như sau (đường dẫn phụ thuộc tên miền):

server {
    listen 443 ssl;
    server_name example.com www.example.com;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    root /var/www/example;
}

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

Khối đầu phục vụ HTTPS với chứng chỉ vừa cấp. Khối sau chuyển hướng mọi yêu cầu HTTP sang HTTPS bằng mã 301.

Tự động gia hạn

Chứng chỉ Let's Encrypt có thời hạn ngắn (khoảng 90 ngày) và được thiết kế để gia hạn tự động. Gói Certbot thường đã cài sẵn bộ hẹn giờ. Hãy kiểm tra bằng lệnh chạy thử, không thực sự gia hạn:

sudo certbot renew --dry-run

Nếu lệnh báo thành công thì yên tâm. Bạn nên chạy thử này một lần sau khi cài, vì nhiều người chỉ phát hiện việc gia hạn hỏng khi trang đã hiển thị cảnh báo hết hạn.

Kiểm tra kết quả

  1. Mở https://example.com và xem biểu tượng ổ khóa trên trình duyệt.
  2. Thử vào bản http:// để chắc chắn nó tự chuyển sang https://.
  3. Dùng curl -I https://example.com để xem mã trả về.

Lỗi thường gặp

  • Xác minh thất bại: DNS chưa trỏ đúng hoặc cổng 80 bị chặn. Kiểm tra bằng dig hoặc công cụ tra DNS và xem tường lửa.
  • Nội dung hỗn hợp (mixed content): trang HTTPS nhưng vẫn nạp ảnh hay script bằng http://. Sửa đường dẫn thành HTTPS hoặc đường dẫn tương đối.
  • Giới hạn tần suất: thử quá nhiều lần cấp chứng chỉ sẽ bị tạm khóa. Hãy dùng chế độ thử nghiệm khi đang mày mò.
  • Chứng chỉ riêng cho tên miền phụ: nếu cần chứng chỉ ký tự đại diện (wildcard), phải xác minh qua DNS, quy trình khác một chút.

Kết luận

HTTPS không còn là tính năng tốn kém hay phức tạp. Với Certbot, bạn có chứng chỉ miễn phí, chuyển hướng tự động và gia hạn tự động. Hãy bật HTTPS cho mọi website bạn triển khai, kể cả dự án thử nghiệm.

Nếu bạn muốn một lộ trình trọn vẹn từ thuê VPS đến chạy website bảo mật, hãy xem các khóa học tại codebem.com.

author_photo
Nguyễn Đình Cường

0 comment