Cách cài đặt SSL miễn phí với Let’s Encrypt trên linux

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!

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *