Let’s Encrypt là một ứng dụng cung cấp SSL hay HTTPS miễn phí không giới hạn đã được sử dụng ở rất nhiều website
Nếu sử dụng CPanel thì có thể Let’s Encrypt đã được cài đặt thì ko cần cài đặt, Ở bài viết này tôi sẽ giúp bạn cài đặt Let’s Encrypt trên centosCentOS
1. Cài đặt Let’s Encrypt
Đầu tiên cài đăt snap
đây là một package manage giống như yum
ở centos hay apt-get
ở ubuntu
yum install snapd -y systemctl enable --now snapd.socket ln -s /var/lib/snapd/snap /snap
Nếu bạn đã cài certbot trước đó bằng yum thì bạn cần xóa certbot trước và cài lại bằng snapd
yum remove certbot
sử dụng snap để cài certbot
Chú ý: nếu install certbot gặp lỗi thì chờ khoảng 30s rồi thử lại
snap install core snap refresh core snap install --classic certbot ln -s /snap/bin/certbot /usr/bin/certbot
Ngừng nginx service
service nginx stop
Bây giờ cài certbot cho 1 domain
certbot certonly --standalone
* Nếu bạn muốn cài đặt cert cho tất cả domain của mình, hãy chạy lệnh này để nhận chứng chỉ và yêu cầu Certbot tự động chỉnh sửa cấu hình Nginx của bạn để phân phát nó, bật quyền truy cập HTTPS chỉ trong một bước certbot --nginx
Nhưng ở đây tôi chỉ hướng dẫn cài cho một tên miền
Chờ một lúc để Let’s Encrypt cài đặt. Tiếp theo điền email của bạn để certbot gửi mail khi gặp lỗi.
Creating virtual environment...
Installing Python packages...
Installation succeeded.
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)(Enter 'c' to cancel): duongva91@gmail.com
Tiếp theo gõ a
để đồng ý.
Please read the Tenn of Service at https://letsencrypt.org/documents/LE SA v1.1.1 August 1 2016.pdf. You must agree in order to register
with the ACME server at https://acme-v01.api.letsencrypt.org/directory
(A)Agree/(C)ancel: a
Please enter in your domain name(s) (comma and/or space separated) (Enter 'c' to cancel): freelancerviet.net www.freelancerviet.net
Tiếp theo điền domain của bạn muốn cài SSL và nhấn Enter. Ở bước này chỉ điền tên miền không có www hoặc có www của 1 domain hay 1 subdomain duy nhất . Nếu muốn thêm cho nhiều domain thì lặp lại bước trên.
Nếu thành công bạn sẽ nhìn thấy tin nhắn sau:
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/freelancerviet.net/fullchain.pem. Your cert will expire on 2016-08-23. To obtain a new version of the certificate in the future, simply run Certbot again. - If you lose your account credentials, you can recover through e-mails sent to duongva91@gmail.com. - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
Chú ý đoạn màu đỏ:
/etc/letsencrypt/live/freelancerviet.net/fullchain.pem
: Thư mục chứa certificate files
2016-08-23 : Ngày hết hạn của certificate (90 ngày từ lúc cài đặt)
2. Tiếp theo cần cấu hình nginx
Sau khi có certificate files, Chúng ta cần chỉnh sửa Nginx configuration file cho domain cần cài SSL. Ví dụ nếu domain là freelancerviet.net
, thì configuration file ở /etc/nginx/conf.d/freelancerviet.net.conf
Cài đặt DH parameters file 2048 bit (Lưu ý chỉ làm một lần, ở các lần cài ssl cho các tên miền sau thì ko cần làm bước này nữa)
mkdir /etc/nginx/ssl/ openssl dhparam 2048 -out /etc/nginx/ssl/dhparam.pem
Sửa /etc/nginx/conf.d/freelancerviet.net.conf
bằng lệnh vi
vi /etc/nginx/conf.d/freelancerviet.net.conf
Sửa như sau
server { listen 80; server_name freelancerviet.net www.freelancerviet.net; rewrite ^(.*) https://freelancerviet.net$1 permanent; } server { listen 443 ssl; server_name freelancerviet.net; root /home/freelancerviet.net; index index.php index.html index.htm; # SSL ssl_certificate /etc/letsencrypt/live/freelancerviet.net/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/freelancerviet.net/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; # Improve HTTPS performance with session resumption ssl_session_cache shared:SSL:50m; ssl_session_timeout 1d; # DH parameters ssl_dhparam /etc/nginx/ssl/dhparam.pem; # Enable HSTS add_header Strict-Transport-Security "max-age=31536000" always; location / { try_files $uri $uri/ /index.php?$args; } }
Chú ý các dòng màu đỏ là cần thay đổi:
– server {
listen 80;
server_name freelancerviet.net;
rewrite ^(.*) https://freelancerviet.net$1 permanent;
}
Tự động redirect http thành https
– listen 443:
Thay đổi port thành 443
– # SSL
ssl_certificate /etc/letsencrypt/live/freelancerviet.net/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/freelancerviet.net/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
# Improve HTTPS performance with session resumption
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
# DH parameters
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
Đây là những thông số cần thiết cho SSL
Bấm ESC
để thoát chế độ chỉnh sửa của vi rồi bấm tiếp:wq
để lưu và thoát.
Giờ khởi động lại nginx
service nginx start
Giờ bạn có thể vào lại domain để kiểm tra kết quả
3. Tự động gia hạn Let’s Encrypt
Mở crontab configuration file:
EDITOR=nano crontab -e
Copy đoạn code sau và dán vào crontab:
30 2 * * * /usr/bin/certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start" >> /var/log/le-renew.log
Bấm Ctrl + O và Enter để lưu lại. Tiếp theo bấm Ctrl + X để thoát. Nếu bạn nhìn thấy tin nhắn dưới đây tức là đã tạo cronjob thành công.
crontab: installing new crontab
Crontab trên sẽ chạy Let’s Encrypt renewal command vào 2:30 mỗi ngày và kiểm tra ssl hết hạn hay chưa vào tiến hành gia hạn. Câu lệnh trên đã bao gồm tất nginx. renew và bật lại nginx. Tiến trình xảy ra rất nhanh nên sẽ không ảnh hưởng đến website, nhưng bạn cần cho crontab này chạy khi ít người dùng ví dụ như 2:30p đêm.
Vậy là đã xong. Cảm ơn bạn đã theo dõi bài viết, nếu thấy hữu ích hãy cho mình 1 like vào fanpage facebook hay donate 🙂
Good luck!