Hướng dẫn lấy chứng chỉ SSL trên Ubuntu 20.04 bằng Certbot (Standalone mode)

Những điểm chính cần nắm

 

  • Giới thiệu Certbot:
    Hiểu Certbot là gì, cơ chế hoạt động và lý do nên sử dụng.

 

  • Yêu cầu cần chuẩn bị:
    Máy chủ Ubuntu 20.04, quyền sudo, tên miền hợp lệ, firewall hoạt động và các cổng 80/443 không bị chiếm dụng.

 

  • Các bước lấy SSL với Certbot Standalone:
    Bao gồm cài đặt Certbot, chạy cấp chứng chỉ, kiểm tra file SSL và cấu hình tự động gia hạn.

 

Giới thiệu về Certbot

 

Certbot là công cụ chính thức do Let’s Encrypt phát triển, hỗ trợ:

 

  • Xác thực quyền sở hữu tên miền

 

  • Tự động tải chứng chỉ SSL

 

  • Gia hạn chứng chỉ định kỳ

 

  • Tích hợp với Apache, Nginx hoặc chạy độc lập (Standalone)

 

SSL, Ubuntu, Certbot

 

Trong bài viết này, mình tập trung vào Standalone mode – chế độ Certbot tự khởi chạy một web server tạm thời để xác thực tên miền. Cách này đặc biệt phù hợp khi:

 

  • Máy chủ chưa chạy Apache/Nginx

 

  • Dùng SSL cho mail server, message broker, API riêng

 

Bài viết không đi sâu vào cấu hình SSL cho từng ứng dụng cụ thể, nhưng sau khi hoàn thành, bạn sẽ có chứng chỉ hợp lệ và tự động gia hạn.

 

Yêu cầu trước khi lấy SSL bằng Certbot Standalone

 

Trước khi bắt đầu, bạn cần đảm bảo:

 

  • Máy chủ Ubuntu 20.04

 

  • Tài khoản người dùng có quyền sudo

 

  • Firewall đã cấu hình cơ bản (UFW)

 

  • Một tên miền hợp lệ đã trỏ về IP máy chủ (ví dụ: your_domain)

 

  • Port 80 và 443 đang trống

 

Nếu máy chủ đang chạy web server trên các cổng này, bạn cần dùng chế độ khác như webroot mode
 

Bước 1 – Cài đặt Certbot

 

Certbot khuyến nghị cài đặt bằng snap package để luôn nhận được phiên bản mới nhất.

 

Cập nhật snap core


 
sudo snap install core sudo snap refresh core
 

Nếu máy chủ đã từng cài Certbot bằng apt, hãy gỡ bỏ trước:


 
sudo apt remove certbot
 

Cài đặt Certbot bằng snap


 
sudo snap install --classic certbot
 
 

Tạo liên kết lệnh certbot


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

Việc này giúp bạn có thể chạy lệnh certbot trực tiếp mà không cần chỉ rõ đường dẫn snap.

 

Bước 2 – Khởi chạy Certbot và cấp chứng chỉ SSL

 

Certbot cần sử dụng port 80 hoặc 443 để xác thực tên miền với Let’s Encrypt.

 

Mở cổng 443 trên firewall


 
sudo ufw allow 443
 

Output:


 
Rule added Rule added (v6)
 

Chạy Certbot ở chế độ Standalone


 
sudo certbot certonly --standalone -d your_domain
 

Giải thích:

 

  • certonly: chỉ lấy chứng chỉ, không tự cấu hình dịch vụ

 

  • --standalone: Certbot tự chạy web server tạm

 

  • -d: chỉ định domain cần cấp SSL

 

Sau khi chạy lệnh:

 

  • Nhập email liên hệ

 

  • Đồng ý điều khoản sử dụng

 

  • Certbot sẽ tự động xác thực và cấp chứng chỉ

 

Nếu thành công, bạn sẽ thấy thông báo kèm đường dẫn lưu chứng chỉ.

 

Bước 3 – Kiểm tra và cấu hình chứng chỉ SSL

 

Mỗi ứng dụng sẽ có cách cấu hình SSL khác nhau, nên phần này chỉ tập trung vào kiểm tra các file chứng chỉ mà Certbot đã tải về.

 

Kiểm tra thư mục chứa SSL

 

sudo ls /etc/letsencrypt/live/your_domain
 

Output:


 
cert.pem chain.pem fullchain.pem privkey.pem README
 

Ý nghĩa các file quan trọng

 

  • privkey.pem
    Chứa private key, cần bảo mật tuyệt đối. Thư mục /etc/letsencrypt chỉ cho phép root truy cập.

 

  • fullchain.pem
    Chứa chứng chỉ đầy đủ (certificate + intermediate chain). Hầu hết phần mềm sẽ dùng file này.

 

Khuyến nghị: Không chỉnh sửa quyền hoặc di chuyển file trong thư mục letsencrypt nếu không thực sự cần thiết.

 

Bước 4 – Thiết lập tự động gia hạn chứng chỉ

 

Chứng chỉ Let’s Encrypt có thời hạn 90 ngày, do đó Certbot sẽ tự động thiết lập cron job để gia hạn.

 

Cơ chế gia hạn mặc định

 

  • Script gia hạn nằm trong /etc/cron.d

 

  • Chạy 2 lần mỗi ngày

 

  • Chỉ gia hạn chứng chỉ còn dưới 30 ngày

 

Tự động reload dịch vụ sau khi gia hạn

 

Để dịch vụ sử dụng chứng chỉ mới, bạn có thể dùng renew_hook.

 

Mở file cấu hình gia hạn:


 
sudo nano /etc/letsencrypt/renewal/your_domain.conf
 

Thêm dòng sau vào cuối file:


 
renew_hook = systemctl reload your_service
 

Ví dụ:

 

  • nginx

 

  • apache2

 

  • postfix

 

  • rabbitmq-server

 

Lưu file và kiểm tra thử quá trình gia hạn:


 
sudo certbot renew --dry-run
 

Nếu không có lỗi, hệ thống của bạn đã sẵn sàng tự động gia hạn SSL hoàn toà

 HỖ TRỢ TRỰC TUYẾN