Cybersecurity, Linux, Ubuntu

Tạo SSL miễn phí với Let’s Encrypt trên Ubuntu 16.04

Written by huudoanh

Let’s Encrypt là Certificate Authority (CA) cung cấp một phương thức đơn giản để tải và cài đặt chứng chỉ TLS / SSL miễn phí, từ đó cho phép mã hóa HTTPS trên các máy chủ web. Nó đơn giản hóa quy trình bằng cách cung cấp một ứng dụng Certbot, cố gắng tự động hóa hầu hết các bước cần thiết. Hiện tại, toàn bộ quá trình lấy và cài đặt chứng chỉ hoàn toàn tự động trên cả Apache và Nginx.

Trong hướng dẫn này, bạn sẽ sử dụng Certbot để lấy chứng chỉ SSL miễn phí cho Nginx trên Ubuntu 16.04 và thiết lập chứng chỉ của bạn có thể tự động gia hạn.

Chuẩn bị

Để thực hiện theo hướng dẫn này, bạn cần chuẩn bị:

  • Máy chủ Ubuntu 16.04 đã được cài đặt
  • Tên miền example.com
  • Trỏ tên miền example.comwww.example.com về IP máy chủ Ubuntu 16.04

Bước 1 – Cài đặt Certbot

Bước đầu tiên để nhận SSL certificate từ Let’s Encrypt là cài đặt ứng dụng Certbot lên máy chủ của bạn.

Đầu tiên, thêm repository

sudo add-apt-repository ppa:certbot/certbot

Sau đó, cập nhật thông tin danh sách package để nhận thông tin repository’s package mới.

sudo apt-get update

Cuối cùng, cài đặt Certbot’s Nginx package với apt-get.

sudo apt-get install python-certbot-nginx

Bước 2 – Thiết lập Nginx

Certbot có thể tự động định cấu hình SSL cho Nginx, nhưng nó cần tìm đúng tên miền trong máy chủ trong của bạn. Certbot thực hiện điều này bằng cách tìm kiếm một server_name phù hợp với tên miền mà bạn yêu cầu certificate.

Nếu bạn bắt đầu với việc cài đặt Nginx mới, bạn có thể cập nhật tệp cấu hình mặc định. Sử dụng nano hoặc trình soạn thảo thường dùng của bạn.

sudo nano /etc/nginx/sites-available/default

Tìm đến dòng server_name và thay thế dấu gạch chân _ bằng tên miền của bạn:

. . .
server_name example.com www.example.com;
. . .

Lưu lại sau khi đã hoàn thành.

Để xác minh lại cấu hình của bạn có đúng hay không dùng lệnh:

sudo nginx -t

Nếu bạn có thông báo lỗi, mở file cấu hình và test lại.

Khi bạn đã cấu hình đúng cú pháp, khởi động lại Nginx để nhận cấu hình mới.

sudo systemctl reload nginx

Certbot bây giờ đã có thể nhận diện được tên miền mà bạn đã cấu hình. Tiếp theo bạn sẽ cập nhật firewall để mở Port cho HTTPS traffic.

Bước 3 – Mở cổng Firewall cho HTTPS traffic

Nếu bạn đã bật tường lửa ufw, theo khuyến nghị bạn sẽ cần điều chỉnh các cài đặt để cho phép lưu lượng HTTPS chạy qua.

Kiểm tra trạng thái của firewall

sudo ufw status

Kết quả hiển thị như bên dưới có nghĩa là chỉ có HTTP được mở:

Output
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Nginx HTTP                 ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

Để mở traffic HTTPS, bạn có thể sử dụng lệnh allow Nginx Full profile và xoá Nginx HTTP profile

sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'

Kiểm tra lại trạng thái firewall:

sudo ufw status

Kết quả như sau:

Output
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx Full                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx Full (v6)            ALLOW       Anywhere (v6)

Bây giờ chúng ta đã sẵn sàng để chạy Certbot và nhận certificates.

Bước 4 – Lấy SSL Certificate

Certbot cung cấp nhiều cách khác nhau để có được chứng chỉ SSL, thông qua các plugin khác nhau. Plugin Nginx sẽ đảm nhiệm việc cấu hình lại Nginx và tải lại cấu hình bất cứ khi nào cần thiết:

sudo certbot --nginx -d example.com -d www.example.com

Nếu đây là lần đầu tiên bạn chạy certbot, bạn sẽ được nhắc nhập địa chỉ email và đồng ý với các điều khoản dịch vụ. Sau đó, certbot sẽ liên lạc với máy chủ Let’s Encrypt để xác minh tên miền của.

Nếu thành công, certbot sẽ hỏi bạn cấu hình các cài đặt HTTPS như sau:

Output
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

Chọn 1 hoặc 2, sau đó nhấn ENTER. Cấu hình sẽ được cập nhật và Nginx sẽ tải lại để nhận cài đặt mới. certbot sẽ kết thúc bằng một thông báo cho bạn biết quá trình đã thành công và nơi chứng chỉ của bạn được lưu trữ.

Output
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/example.com/fullchain.pem. Your cert will
   expire on 2020-10-24. 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"
 - 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

Mở lại trang web của bạn trên trình duyệt với https://example.com và bạn đã hoàn thành việc cấu hình https cho server nginx.