Bài viết này hướng dẫn cách cài đặt SSL Let’s Encrypt cho vnengineer.net*.vnengineer.net bằng Certbot + DNS-01 challenge, kèm theo reload Nginxxử lý lỗi tạo thư mục -0001 khi chạy nhiều lần.


1. Cài Certbot

sudo apt update
sudo apt install certbot -y

2. Chạy Certbot cấp SSL cho vnengineer.net

sudo certbot certonly --manual \
  --preferred-challenges dns \
  --cert-name vnengineer.net \
  -d "*.vnengineer.net" \
  -d vnengineer.net

Lệnh trên tạo một certificate duy nhất dùng chung cho:

  • vnengineer.net
  • *.vnengineer.net

3. Thêm bản ghi DNS xác thực (_acme-challenge)

Khi Certbot hiển thị:

Please deploy a DNS TXT record under the name:
_acme-challenge.vnengineer.net

Tạo bản ghi DNS:

Thuộc tínhGiá trị
TypeTXT
Name / Host_acme-challenge
ValueToken do Certbot cung cấp
TTLAuto / 60

⚠️ Không nhập _acme-challenge.vnengineer.net vào ô Name để tránh lỗi nhân đôi domain.


4. Kiểm tra DNS trước khi xác thực

dig TXT _acme-challenge.vnengineer.net +short

Nếu thấy token hiển thị đúng → quay lại terminal và nhấn Enter.


5. Vị trí lưu certificate

Sau khi xác thực thành công:

/etc/letsencrypt/live/vnengineer.net/
├── fullchain.pem
├── privkey.pem

6. Cấu hình Nginx sử dụng SSL

server {
    listen 443 ssl;
    server_name vnengineer.net *.vnengineer.net;
    ssl_certificate     /etc/letsencrypt/live/vnengineer.net/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/vnengineer.net/privkey.pem;
}

7. Reload Nginx để áp dụng SSL

⚠️ Bước này bắt buộc, rất hay bị quên.

sudo nginx -t
sudo systemctl reload nginx

8. Trường hợp lỡ tạo thư mục vnengineer.net-0001

8.1 Kiểm tra các certificate đang tồn tại

sudo certbot certificates

8.2 Cách 1 – Xóa -0001 và cấp lại (khuyên dùng)

sudo certbot delete --cert-name vnengineer.net-0001

Sau đó chạy lại:

sudo certbot certonly --manual \
  --preferred-challenges dns \
  --cert-name vnengineer.net \
  -d "*.vnengineer.net" \
  -d vnengineer.net

8.3 Cách 2 – Dùng symlink nhanh (không cần sửa Nginx)

sudo rm -rf /etc/letsencrypt/live/vnengineer.net
sudo ln -s /etc/letsencrypt/live/vnengineer.net-0001 \
           /etc/letsencrypt/live/vnengineer.net

9. Lưu ý quan trọng để không sinh -0001 lần sau

  • Luôn dùng --cert-name vnengineer.net
  • Không hardcode đường dẫn -0001 trong Nginx
  • Mỗi domain chỉ nên có 1 cert chính

Kết luận

Với Certbot + DNS-01 challenge, bạn chỉ cần một certificate duy nhất cho toàn bộ hệ thống vnengineer.net.
Chỉ cần nhớ:

  • Tạo TXT record đúng
  • Reload Nginx sau khi cấp cert
  • Kiểm soát cert-name để tránh -0001