Issue:

+ Bash script VPSSIM bị lỗi, không cấp/gia hạn SSL letsencrypt được nữa => cần sử dụng một phương thức khác để cấp SSL Letsencrypt cho website.

+ Chú ý: trước khi làm nên backup lại web hoặc backup toàn bộ vps.

Cách xử lý:

Sử dụng Certbot client (thực hiện trên Centos & Nginx) theo hướng dẫn: https://certbot.eff.org/

Chi tiết về các câu lệnh hỗ trợ “Certbot”: https://certbot.eff.org/docs/using.html#nginx

B1: Cài đặt các thư viện cần thiết & Download certbot client:

Sau khi truy cập vào trang certbot ở trên & lựa chọn hệ điều hành, webserver, bạn sẽ được hướng dẫn truy cập vào server (hướng dẫn dành cho Nginx & Centos) => download Snapd => xóa các package quản lý Certbot đã cài (nếu có) (Bạn có thể bằng cách sử dụng lệnh certbot để kiểm tra xem đã tồn tại package quản lý Certbot nào chưa)

Sau khi đã làm theo các bước trên, bạn tải Certbot plugin về theo hướng dẫn.

B2: Obtain SSL key

+ Nếu file domain.conf ở vị trí mặc định (/etc/nginx/) thì sử dụng lệnh dưới:
sudo certbot --nginx certonly -d yourdomain.com
+ Nếu nginx được build từ source, trong câu lệnh cần chỉ location của file domain.conf (VD: /etc/nginx/conf):
sudo certbot --nginx certonly --nginx-server /etc/nginx/conf -d yourdomain.com

=> nếu không khai báo location thì sẽ cần tự sửa fle domain.conf (cụ thể là sửa đường dẫn SSL trong file domain.conf)

Sau khi chạy xong, sẽ có thông báo:
Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/domain.com/fullchain.pem  => Cần lưu địa chỉ file key lại để kiểm tra đường dẫn trong file domain.conf có đúng không hoặc khi clone website cần tạo các file chứa key tương ứng.

Chú ý: Cách áp dụng https cho cả domain.com & www.domain.com 

– Khi bạn sử dụng tên miền có dạng: www.domain.com hoặc domain.com và muốn cài đặt SSL cho cả 2 dạng này thì cách đơn giản nhất là cài đặt SSL cho 1 tên miền (VD: là cài SSL cho domain.com) => sau đó trong file domain.com.conf, bạn thêm câu lệnh để tạo rule “301” redirection – chuyển hướng vĩnh viễn cho www.domain.com sang domain.com. Như vậy, khi người dùng gõ www.domain.com => sẽ truy cập https://domain.com. Đoạn code cần thêm vào block server: 

server { if ($host = www.domain.com) { return 301 https://$host$request_uri;}
..........................}

B3: Kiểm tra đường dẫn trong file domain.conf và sửa file domain.conf (nếu cần)

– Sau khi đã cài đặt SSL certificate xong, bạn kiểm tra bằng cách truy cập bằng đường dẫn: https://domain => Nếu hiện ra khóa là thành công. 

Letsencrypt SSL

Chú ý: Để tối ưu hiệu quả của https, bạn có thể sửa cấu hình file domain.conf để bật http2 để tăng tốc tải website khi người dùng truy cập vào website của bạn theo hướng dẫn tại Bật http2 với Nginx

– Nếu không truy cập được website hoặc thấy báo ngày hết hạn ở trình duyệt khác với ngày hết hạn được thông báo khi cài đặt tại server (như hình dưới), bạn cần kiểm tra lại location của SSL certificate được khai báo trong file domain.conf có đúng không.

Letsencrypt validity

+ Sau đó bạn tiến hành sửa đường dẫn của SSL certificate trong file domain.conf rồi reload lại server là xong.

Chú ý: nên backup lại file domain.conf trước khi sửa.

B4: Gia hạn SSL tự động

Letsencrypt SSL có thời hạn 90 ngày.
+ Gia hạn manual:
Khi gần đến thời hạn, chúng ta chạy lệnh để gia hạn:
Certbot renew - -dry-run (test thử xem có renew được không)

=> Nếu gặp lỗi challenge not found như dưới đây:
Detail: Invalid response from
https://domain.com/.well-known/acme-challenge/eaMnU_fLk3FBPaAvfPB-OSRB_pGkOKVX7jRboZX1S7c
[xxx.xxx.xxx.xxx]: “<html>\r\n<head><title>404 Not Found

Cần thêm đường dẫn đến acme-challenge vào lệnh:
certbot renew -a webroot -w /var/www/html --dry-run
với /var/www/html được khai báo trong domain.conf:
# Config for Free SSL (LetEncrypt) – Do not Delete !
location ~ /.well-known {
allow all;
root /var/www/html;
}

+ chỉ gia hạn 1 domain cụ thể trên server: 

certbot certonly -d domain

+ gia hạn tự động bằng cách tạo cronjob trên server: 

Mở crontab: crontab -e

Tạo lệnh gia hạn tự động hàng ngày: 00 1 */1 * * certbot renew --post-hook "service nginx reload" >> /var/log/certbot-renew.log

Lệnh này sẽ được chạy vào 1:00 sáng, mỗi ngày một lần để gia hạn SSL, sau khi gia hạn xong sẽ reload Nginx để cập nhật cert mới nhất.

B5: Xóa SSL certificate cho 1 tên miền

Khi xóa SSL certificate của 1 domain cụ thể, ta cần xóa những file & thư mục sau:

+ /etc/letsencrypt/renewal/tenmien.conf (file)

+ /etc/letsencrypt/archived/tenmien (directory)

+ /etc/letsencrypt/live/tenmien (directory)

B6: Check cronjob running

When cron attempts to run a command, it logs it in syslog. By grepping syslog for the name of the command you found in a crontab file you can validate that your job is scheduled correctly and cron is running: 

– Run this command to check cron status: “service crond status” 

=> “ERROR (getpwnam() failed):  

– Run this command “tail -n 1000 /var/spool/cron/*” to see cron detail (user, content…)

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *