Câu hình cloudflare

Link tham khao : https://viblo.asia/p/cau-hinh-ssl-wildcard-voi-lets-encrypt-dung-cach-Do754rz3ZM6

Tạo credentials file

Bước đầu tiên bạn cần tạo file credentials chứa token của DigitalOcean. Plugin Certbot sẽ dựa vào file này để xác thực bạn là chủ sở hữu tài khoản DigitalOcean và domain.

Trong trang quản lý của DigitalOcean, chọn như hình để generate Personal access token mới. Ở bước này cần chú ý 2 điều:

Cấp cả hai quyền Read và Write Thời gian hết hạn đặt là No expiry (không hết hạn) Xong xuôi bạn copy token lại và qua bước tiếp theo.

image.png

Thực hiện SSH lên server, ở đây mình dùng VPS. Chạy lệnh sau để tạo file credentials mới.

nano ~/certbot-creds.ini

Và paste token đã copy vào theo cấu trúc sau.

# Thay token đã copy vào dấu ba chấm dns_digitalocean_token = …

Lưu file lại và chạy lệnh sau để giới hạn permission chỉ cho tài khoản của bạn.

sudo chmod 600 ~/certbot-creds.ini

Tạo chưng chỉ:

Chạy Certbot với các option như sau, mình viết thành nhiều dòng cho dễ đọc, nếu bạn không biết cách gõ nhiều dòng trong terminal thì cứ gõ chung một dòng thôi nhé.

# Thay thế domain của bạn cho phù hợp sudo certbot certonly

-d tonghoangvu.dev -d *.tonghoangvu.dev –dns-digitalocean –dns-digitalocean-credentials ~/certbot-creds.ini

# Một số DNS provider như Cloudflare cần thời gian chờ lâu hơn # Thêm tham số sau để tăng thời gian chờ lên 60s (mặc định 10s) –dns-cloudflare-propagation-seconds 60

Lệnh trên sẽ tạo chứng chỉ chung cho cả domain gốc tonghoangvu.dev và wildcard *.tonghoangvu.dev, khá tiện với mình. Và lệnh trên cũng chỉ định dùng DNS plugin nào và file credentials phù hợp để xác thực.

Hình dưới là toàn bộ log ở bước này. Lần đầu chạy Certbot sẽ hỏi email của bạn (để thông báo khi chứng chỉ sắp hết hạn) và vài câu yes/no, cứ chọn như bình thường thôi.

image.png

Do câu lệnh trên mình dùng mode certonly, nên chỉ generate 2 file fullchain.pem và privkey.pem. Do mình thích tự cấu hình thủ công với 2 file này hơn, ngoài ra Certbot cũng có thể tự động setup chứng chỉ cho bạn luôn.

image.png

Ví dụ đây là cấu hình Nginx cho một static web của mình. Nginx làm reverse proxy, nên chỉ cần cấu hình HTTPS cho Nginx thôi, các service phía sau không cần cấu hình nữa.

Câu hình tư động gia hạn:

Trước hết test thử xem renew có bị lỗi gì không. Chạy lệnh renew với flag –dry-run để mô phỏng lại việc renew (không tác động gì tới hệ thống thật). Còn lúc chạy job thì bỏ –dry-run ra là được.

sudo certbot renew –dry-run

Kết quả hiện như hình là thành công, không có lỗi gì nhé. Tuy nhiên, nên chạy dry run sau khi đổi nameserver một thời gian (vài tiếng), chạy ngay lập tức thì DNS chưa kịp update nên sẽ không thành công.

image.png

Cuối cùng là thiết lập cronjob chạy lệnh renew liên tục thôi, khoảng 2 lần một ngày. Certbot sẽ tự check chứng chỉ gần hết hạn thì mới renew, còn không thì bỏ qua, nên bạn cũng đừng lo việc thay chứng chỉ liên tục sẽ ảnh hưởng đến hiệu năng.

sudo crontab -e

File crontab mở ra sẽ gồm nhiều dòng, mỗi dòng là một cron expression (mô tả lúc nào chạy) và câu lệnh thực hiện. Như trong hình, mình chạy job lúc 1h và 13h mỗi ngày, restart lại config cho Nginx sau khi renew và xuất log ra file /var/log/letsencrypt/renew.log (khi bị lỗi thì tiện xem lại hơn).

# Renew HTTPS certificates (twice a day, recommended) 0 1,13 * * * sudo certbot renew –deploy-hook “nginx -s reload” >> /var/log/letsencrypt/renew.log

image.png

Okay bài hôm nay đến đây thôi. Thực sự đây là bài viết dài nhất của mình, tốn cả mấy buổi mới viết xong. Hi vọng bạn nào đọc được bài này, làm theo và thành công hãy cho mình một upvote hoặc share nhé. Cảm ơn mọi người nhiều 😍

Script tư động gia hạn:

check_domain.py cloudfare.ini

domain_list.txt renew_subdomain.sh run.sh