Hướng dẫn cài đặt SSL miễn phí Let’s Encrypt

Let’s Encrypt là gì? Let’s Encrypt là một chứng chỉ số miễn phí, ra mắt vào ngày 12 tháng 4 năm 2016. Nó được cung cấp bởi tổ chức chứng nhận phi lợi nhuận Let Encrypt được điều hành bởi Nhóm nghiên cứu bảo mật Internet (ISRG). Nhằm cung cấp chứng chỉ X.509 cho mã hóa TLS (Transport Layer Security) miễn phí. Chứng chỉ có giá trị trong 90 ngày, trong đó việc gia hạn có thể diễn ra bất cứ lúc nào.

SSL là gì?

SSL là một loại chứng chỉ giúp mã hóa các thông tin trên những thiết bị hoặc các ứng dụng có hỗ trợ mã hóa này bằng chứng chỉ SSL. Chứng chỉ SSL sẽ có hai phần gồm những phần Private Key và Public Key, trong đó Public Key nó sẽ được cài ở các ứng dụng đầu cuối mà trình duyệt hay các ứng dụng khác cũng có thể truy cập đọc được, còn Private Key nó sẽ được cài đặt ở các ứng dụng xử lý tiếp nhận dữ liệu.

Mục đích hoạt động của nó giống như chìa khóa để giúp giải mã những dữ liệu gửi đi từ thiết bị đầu cuối cũng đã được mã hóa thông qua Public Key.

Hướng dẫn cài đặt Let’s Encrypt trên Ubuntu / Debian

Cài đặt Certbot

Để cài đặt Certbot chúng ta sử dụng command sau:

sudo apt-get install certbot python3-certbot-nginx

Trường hợp chưa có gói package này thì hãy add repository vào bằng command sau:

sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update

Rồi chạy lại lệnh cài đặt ở trên

Cài đặt Nginx Server sử dụng Let’s Encrypt

Sau khi cài đặt xong, chúng ta có một Web Server sử dụng Nginx, các bạn trỏ domain của bạn tới địa chỉ IP của Web Server. Lúc này Website của bạn chưa được cài đặt Let’s Encrypt nên chỉ sử dụng HTTP. Để sử dụng HTTPS chúng ta thực hiện các bước tiếp theo bên dưới.

Tạo certificate miễn phí cho Domain

Để lấy certificate cho tên miền, chúng ta sử dụng command sau:

sudo certbot --nginx -d test.vietcalls.com www.test.vietcalls.com

Thay test.vietcalls.com thành tên miền của bạn.

[root@localhost conf.d]# certbot --nginx -d test.domain.com -d www.test.domain.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Enter email address (used for urgent renewal and security notices)
 (Enter 'c' to cancel): namle@test.vietcalls.com  (Nhập email của bạn)
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y   (Nhấn Y để đồng ý điều khoản)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N   (Nhấn N để từ chối các thông tin, tin tức từ letsencrypt và Certbot )
Account registered.
Requesting a certificate for test.domain.com and www.test.vietcalls.com
Performing the following challenges:
http-01 challenge for test.vietcalls.com
http-01 challenge for www.test.vietcalls.com
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/conf.d/test.vietcalls.com.conf
Deploying Certificate to VirtualHost /etc/nginx/nginx.conf
Redirecting all traffic on port 80 to ssl in /etc/nginx/conf.d/test.vietcalls.com.conf
Redirecting all traffic on port 80 to ssl in /etc/nginx/nginx.conf

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://test.vietcalls.cf and
https://www.test.vietcalls.cf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/test.domain.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/test.domain.com/privkey.pem
   Your cert will expire on 2021-04-14. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - 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

Như vậy đã cài đặt thành công SSL thông qua Certbot, đường đẫn lưu file chứng chỉ của website sẽ nằm tại đường dẫn tương ứng.

 - Certificate: /etc/letsencrypt/live/test.vietcalls.cf/fullchain.pem
 - Private Key: /etc/letsencrypt/live/test.vietcalls.cf/privkey.pem

Chứng chỉ Let’s Encrypt chỉ có hiệu lực trong 90 ngày, do đó chúng ta thiết lập cronjob  để chứng chỉ tự động gia hạn nếu như hết hạn.

  • Chạy câu lệnh sau để mở cửa sổ thêm Cronjob
00 1 * * * /usr/bin/certbot renew --quiet

Chú thích: Cronjob này có nghĩa là cứ đúng 1:00 AM nó sẽ check chứng chỉ, nếu chứng chỉ hết hạn sẽ tự động gia hạn. Ngược lại, nếu còn hạn sẽ không thực hiện gia hạn.

Cấu hình Nginx sử dụng Let’s Encrypt Certificate

Mặc định Let’s Encrypt sẽ thêm config cho website của bạn vào file /etc/nginx/site-available/default . Còn chưa có thì bạn hãy tư thêm config vào như sau:

server {
# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name test.vietcalls.com; # managed by Certbot
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
# pass PHP scripts to FastCGI server
#
#location ~ \.php$ {
# include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
# fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/test.vietcalls.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/test.vietcalls.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = test.vietcalls.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80 ;
listen [::]:80 ;
server_name test.vietcalls.com;
return 404; # managed by Certbot
}

Reload lại Nginx để nhận HTTPS

sudo systemctl reload nginx

Lời kết

Như vậy qua bài viết này mình đã hướng dẫn bạn cách cài đặt nhanh SSL Let’s Encrypt lên website thông qua Certbot một cách nhanh chóng và đơn giản nhất. Việc cài đặt SSL tưởng chừng đơn giản này nhưng lại giúp ích khá nhiều cho website của bạn trong việc bảo mật cũng như rất tốt cho SEO. Chúc các bạn thành công.!

Tham khảo: https://upcloud.com/community/tutorials/install-lets-encrypt-nginx/

Bài viết liên quan

Leave a Reply

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