Thiết lập SSL cho Nginx bằng Let’s Encrypt trên Ubuntu 22.04

by toantv

Trước khi bắt đầu

Let’s Encrypt là một Tổ chức Chứng chỉ (CA) cung cấp miễn phí các chứng chỉ TLS/SSL, từ đó cho phép mã hóa HTTPS trên các máy chủ web. Nó đơn giản hóa quá trình này bằng cách cung cấp một phần mềm khách, Certbot, gần như tự động hóa hầu hết (nếu không phải tất cả) các bước cần thiết. Hiện tại, quá trình lấy và cài đặt chứng chỉ đã được tự động hoàn toàn 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 22.04 và thiết lập chứng chỉ của bạn tự động gia hạn.

Hướng dẫn này sẽ sử dụng một tệp cấu hình máy chủ Nginx riêng biệt thay vì tệp mặc định. Chúng tôi khuyến nghị tạo các block server Nginx mới cho mỗi tên miền vì nó giúp tránh các lỗi thông thường và giữ các tệp mặc định như một cấu hình dự phòng.

Đảm bảo rằng bạn có quyền truy cập sudo vào máy chủ Linux vì các lệnh được sử dụng trong hướng dẫn này yêu cầu đặc quyền root.

Đảm bảo rằng bạn đã có một tên miền đã đăng ký. Hướng dẫn này sẽ sử dụng tên miền toantranvan.com. Bạn có thể mua một tên miền từ Namecheap, nhận một tên miền miễn phí từ Freenom hoặc sử dụng nhà đăng ký tên miền theo sự lựa chọn của bạn.

Đảm bảo rằng cả hai bản ghi DNS sau đã được thiết lập cho máy chủ của bạn

  • Một bản ghi A với toantranvan.com trỏ đến địa chỉ IP Public của máy chủ của bạn. (Thay bằng tên miền của bạn)
  • Một bản ghi A với www.toantranvan.com trỏ đến địa chỉ IP Public của máy chủ của bạn. (Thay bằng tên miền của bạn)

Đảm bảo rằng Nginx đã được cài đặt bằng cách làm theo Hướng dẫn Cài đặt Linux, Nginx, MySQL, PHP (LEMP) Stack trên Ubuntu 22.04. Và bạn đã có một block server cho tên miền của bạn. Hướng dẫn này sẽ sử dụng /etc/nginx/sites-available/toantranvan.com làm ví dụ.

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

Certbot khuyến nghị sử dụng gói snap của họ để cài đặt. Gói snap hoạt động trên hầu hết các bản phân phối Linux, vì vậy bạn có thể bắt đầu bằng cách đảm bảo rằng snapd core của bạn đã được cập nhật lên phiên bản mới nhất:

sudo snap install core; sudo snap refresh core

Nếu bạn đang làm việc trên một máy chủ đã cài đặt phiên bản cũ của Certbot trước đó, bạn nên gỡ bỏ nó trước khi tiếp tục:

sudo apt remove certbot

Sau đó, bạn có thể cài đặt gói certbot bằng lệnh:

sudo snap install --classic certbot

Bạn có thể liên kết lệnh certbot từ thư mục cài đặt snap với đường dẫn của bạn, để bạn có thể chạy nó chỉ bằng cách gõ certbot. Điều này không cần thiết với tất cả các gói, nhưng snap thường ít ảnh hưởng đến hệ thống mặc định, do đó không xảy ra xung đột với bất kỳ gói hệ thống nào:

sudo ln -s /snap/bin/certbot /usr/bin/certbot

Bước 2: Kiểm tra cấu hình của Nginx

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

Nếu bạn đã làm theo bước thiết lập block server trong hướng dẫn Cài đặt Linux, Nginx, MySQL, PHP (LEMP) Stack trên Ubuntu 22.04, bạn nên có một block server cho tên miền của bạn tại /etc/nginx/sites-available/toantranvan.com (Thay bằng tên miền của bạn) với chỉ thị server_name đã được đặt đúng cách.

Để kiểm tra, mở tệp cấu hình cho tên miền của bạn bằng cách sử dụng vi hoặc trình chỉnh sửa văn bản yêu thích của bạn:

sudo nano /etc/nginx/sites-available/toantranvan.com

Tìm dòng server_name, thay đổi nó thành domain của bạn.

...
server_name toantranvan.com www.toantranvan.com;
...

Sau đó, lưu tệp, thoát khỏi trình soạn thảo của bạn và xác minh cú pháp của các chỉnh sửa cấu hình của bạn:

sudo nginx -t

Khởi động lại nginx để áp dụng các thay đổi.

sudo systemctl reload nginx

Bước 3: Cho phép traffic HTTPS qua Firewall

Nếu bạn đã kích hoạt tường lửa ufw, bạn sẽ cần cho phép kết nối tới Nginx. Để kiểm tra xem có các profile UFW nào có sẵn, hãy chạy lệnh:

sudo ufw app list
Output
Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

Vì bạn đang cấu hình SSL cho máy chủ của mình trong hướng dẫn này, bạn cần cho phép lưu lượng HTTPS trên cổng 443.

sudo ufw allow 'Nginx HTTPS'

Bạn có thể xác minh thay đổi bằng cách kiểm tra trạng thái:

sudo ufw status
Output

Status: active

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

Bước 4: Lấy Chứng chỉ SSL

Certbot cung cấp nhiều cách để lấy chứng chỉ SSL thông qua các plugin. Plugin Nginx sẽ đảm nhận việc cấu hình lại Nginx và tải lại cấu hình khi cần thiết. Để sử dụng plugin này, nhập lệnh sau: (Thay bằng domain của bạn)

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

Lệnh này chạy certbot với plugin –nginx, sử dụng -d để chỉ định các tên miền mà chúng ta muốn lấy chứng chỉ.

Khi chạy lệnh, bạn sẽ được yêu cầu nhập địa chỉ email và đồng ý với các điều khoản dịch vụ. Sau khi làm như vậy, bạn sẽ thấy một tin nhắn cho biết quá trình thành công và vị trí lưu trữ chứng chỉ của bạn là gì:

Output

IMPORTANT NOTES:
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/toantranvan.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/toantranvan.com/privkey.pem
This certificate expires on 2022-06-01.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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ứng chỉ của bạn đã được tải xuống và cài đặt, Nginx của bạn sẽ tự động chuyển hướng tất cả các yêu cầu web sang https://. Hãy thử tải lại trang web của bạn. Nếu bạn kiểm tra máy chủ của mình bằng cách sử dụng SSL Labs Server Test, nó sẽ đạt điểm A.

Bước 5: Xác minh tự động gia hạn chứng chỉ Certbot

Chứng chỉ của Let’s Encrypt chỉ có hiệu lực trong vòng 90 ngày. Điều này nhằm khuyến khích người dùng tự động hóa quá trình gia hạn chứng chỉ. Gói certbot mà chúng ta đã cài đặt sẽ tự động thực hiện điều này bằng cách thêm một bộ hẹn giờ systemd, chạy hai lần mỗi ngày và tự động gia hạn bất kỳ chứng chỉ nào còn 30 ngày trước khi hết hạn.

Bạn có thể truy vấn trạng thái của bộ hẹn giờ bằng systemctl:

sudo systemctl status snap.certbot.renew.service
Output
○ snap.certbot.renew.service - Service for snap application certbot.renew
     Loaded: loaded (/etc/systemd/system/snap.certbot.renew.service; static)
     Active: inactive (dead)

Để kiểm tra quá trình gia hạn, bạn có thể thực hiện test bằng lệnh certbot:

sudo certbot renew --dry-run
Output

Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/toantranvan.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Simulating renewal of an existing certificate for toantranvan.com and www.toantranvan.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:
  /etc/letsencrypt/live/toantranvan.com/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Nếu bạn không thấy bất kỳ lỗi nào, bạn đã hoàn thành việc tự động gia hạn. Khi cần thiết, Certbot sẽ gia hạn chứng chỉ của bạn và tải lại Nginx để áp dụng các thay đổi. Nếu quá trình gia hạn tự động bị lỗi, Let’s Encrypt sẽ gửi một thông báo đến địa chỉ email bạn đã chỉ định, cảnh báo khi chứng chỉ của bạn sắp hết hạn.

Tổng kết

Trong hướng dẫn này, bạn đã cài đặt ứng dụng Certbot của Let’s Encrypt, tải xuống chứng chỉ SSL cho tên miền của bạn, cấu hình Nginx để sử dụng chứng chỉ này và thiết lập tự động gia hạn chứng chỉ. Nếu bạn có câu hỏi thêm về việc sử dụng Certbot, hãy tham khảo các tài liệu chính thức tại đây https://eff-certbot.readthedocs.io/en/latest/

Related Posts

Leave a Comment