1. Quá trình cấp & gia hạn Letsencrypt SSL

Hiện có nhiều phương thức như sử dụng Webroot, Standalone, Apache, Nginx, DNS Plugins, manual… Dưới đây là 2 phương thức phổ biến (Stanalone & Webroot) và được sử dụng bởi 2 bashscript thông dụng tại VN: VPSSIM & HOCVPS.

Cá nhân mình thì thích dùng Standalone (Hocvps) sử dụng do đơn giản, tất cả đều được tự động (tự động issue, tạo cronjob tự động renew, cấu hình file conf rõ ràng => việc cập nhật/thay đổi file conf cho các mục đích khác đơn giản hơn so với cách vpssim sử dụng). 

Hocvps letsencrypt

2. Chế độ Standalone (Hocvps sử dụng)

Standalone là cách issue & gia hạn đơn giản nhất tuy nhiên có một nhược điểm là cần stop web lại trong khoảng 30s để nhường port 80 cho Standalone xác thực & cấp certificate.
Để gia hạn SSL, bạn vào thư mục cài Letsencrypt & đánh dòng lệnh sau:
certbot-auto renew --pre-hook "service nginx stop" --post-hook "service nginx start" 

hoặc:

 ./Certbot-auto renew --pre-hook "service nginx stop" --post-hook "service nginx start"
Chú ý: Nhớ vào thư mục cài dặt Letsencrypt rồi mới chạy lệnh để tránh command not found.
Tạo cronjob gia hạn tự động Letsencrypt:

Mở file cấu hình crontab:

# EDITOR=nano crontab -e

Copy và paste đoạn code bên dưới vào cửa sổ terminal:

30 2 * * * /opt/letsencrypt/certbot-auto renew --pre-hook "service nginx stop" --post-hook "service nginx start" >> /var/log/le-renew.log

Nhấn Ctrl+O, Enter để lưu và Ctrl+X để thoát. Bạn nhận được thông báo sau là thành công

crontab: installing new crontab

crontab trên sẽ tự động chạy lệnh gia hạn Let’s Encrypt vào lúc 2h30 hàng ngày và kiểm tra xem đã hết hạn chưa và tiến hành gia hạn. Trước khi gia hạn sẽ stop Nginx, sau đó sẽ start lại ngay lập tức. Như vậy, gần như không ảnh hưởng gì cả đến website.

Vậy là xong.

Một số lỗi thường gặp: 
– Cerbot: command not found => If you have installed certbot using the certbot-auto script, you generally should use ./certbot-auto ... (chú ý: the ./ in the beginning) whenever the documentation says certbot .... Cần truy cập vào thư mục cài script này rồi mới chạy lệnh certbot-auto script.
Ví dụ: thư mục cài: /opt/letsencrypt (cần vào thư mục này rồi chạy lệnh – Nếu dùng certbot-auto không được thì dùng ./certbot-auto
1 certificate covers nhiều domain (www & non-www): 
sudo certbot certonly --standalone -d domain.com -d www.domain.com

3. Chế độ webroot (VPSSIM sử dụng)

3.1 VPSSIM sử dụng tool acme.sh với webroot mode:

Để đơn giản quá trình cài đặt SSL từ Letsencrypt, chúng ta nên dùng VPSSIM. Script này có chức năng tự động gia hạn SSL khi chứng chỉ còn hạn 30 ngày nữa, tuy nhiên có một số trường hợp VPSSIM không tự động gia hạn nên chúng ta cần gia hạn bằng tay. Vì vậy, có một số điều cần chú ý khi gia hạn manual SSL, sau khi cài đặt chứng chỉ qua VPSSIM: 

  • VPSSIM sử dụng tool: http://acme.sh
  • VPSSIM sử dụng phương thức webroot để cấp & gia hạn SSL từ Letsencrypt: 

Đây là chế độ mà bắt buộc phải có sẵn một web service, trỏ website trước, vì vậy nó không cần tạo ra 1 máy chủ web ảo chiếm port 443 như chế độ standalone. Khi sử dụng webroot, chúng ta không cần stop web service khi tạo và gia hạn. Việc tạo và gia hạn sẽ được chứng thực thông qua 1 đường link có dạng tenmien.com/.well-known. Đơn giản bạn có thể hiểu nếu trên web của bạn có đường dẫn này thì máy chủ Letsencrypt sẽ xác thực cho bạn và cho phép tạo, gia hạn…

Chú ý: Webroot mode không phát hành/renew được wildcard domain (1 chứng chỉ cho domain chính và các sub domain)

Trong vhost của domain sẽ có thêm đoạn: 

location /.wellknown/ {
              log_not_found off;
              root /usr/local/nginx/html;
để Letsencrypt xác thực (không cần stop Nginx) => thư mục .well-known được VPSSIM thiết lập trong public_html của web.

3.2 Một số câu lệnh manual của tool Acme nếu VPSSIM không thực hiện tự động:

a. Gia hạn Letsecrypt manual:
 acme.sh --renew -d domain.com --force
b. Remove chứng chỉ: 
 acme.sh --remove -d domain.com 
c. Kiểm tra và thêm gia hạn tự động bằng cronjob: 
Tool Acme tự động kiểm tra & gia hạn LetsEncrypt. Nếu vì một lý do nào đó, Acme không gia hạn SSL tự động, bạn có thể kiểm tra cronjob và thực hiện gia hạn tự động như sau: 

+ Liệt kê các cron:

crontab -l

 + Xem chi tiết nội dung 1 cron cụ thể:

less /etc/crontab
+ Tạo cron để gia hạn tự động:
acme.sh --cron
Trong quá trình sử dụng, mình thấy phương thức này hay bị lỗi (có thể là do hoạt động cập nhật/sửa chữa file conf phục vụ các mục đích khác/cấu hình khác) dẫn đến không chạy được chức năng này.