Cài đặt Secure Nginx with Let's Encrypt trên CentOS 8

I. Giới thiệu

Let’s Encrypt là tổ chức phát hành chứng chỉ (CA) cung cấp các chứng chỉ miễn phí cho mã hóa Bảo mật tầng truyền tải (TLS). Nó đơn giản hóa quá trình tạo, xác nhận, ký, cài đặt và gia hạn chứng chỉ bằng cách cung cấp một ứng dụng khách phần mềm — Certbot.

Trong hướng dẫn này, bạn sẽ thiết lập chứng chỉ TLS / SSL từ Let’s Encrypt trên máy chủ CentOS 8 chạy Nginx làm máy chủ web. Ngoài ra, bạn sẽ tự động hóa quy trình gia hạn chứng chỉ bằng cron job.

II. Điều kiện tiên quyết (Prerequisites)

- Để hoàn thành hướng dẫn này, bạn sẽ cần:

+ Một máy chủ CentOS 8 được thiết lập bằng cách làm theo hướng dẫn Thiết lập Máy chủ Ban đầu CentOS 8, bao gồm người dùng không phải root có đặc quyền sudo và firewall.
+ Nginx được cài đặt trên máy chủ CentOS 8 với khối máy chủ được định cấu hình. Bạn có thể tìm hiểu cách thiết lập điều này bằng cách làm theo hướng dẫn Cách cài đặt Nginx trên CentOS 8 của chúng tôi.
+ Tên miền đã đăng ký đầy đủ. Hướng dẫn này sẽ sử dụng your_domain làm ví dụ xuyên suốt. Bạn có thể mua tên miền trên Namecheap, nhận một tên miền miễn phí trên Freenom hoặc sử dụng công ty đăng ký tên miền mà bạn chọn.
+ Cả hai bản ghi DNS sau được thiết lập cho máy chủ của bạn:
   1. Một bản ghi với your_domain trỏ đến địa chỉ IP Public của máy chủ của bạn.
   2. Một bản ghi có www.your_domain trỏ đến địa chỉ IP Public của máy chủ của bạn.

III. Cài đặt

Bước 1: Cài đặt Certbot Let’s Encrypt Client

Để cài đặt certbot software package bạn cần truy cập ssh quyền root vào server.

ssh root@your_server_ip

Gói certbot không có sẵn thông qua trình quản lý package theo mặc định. Bạn sẽ cần kích hoạt kho EPEL để cài đặt Certbot.

Để thêm kho lưu trữ CentOS 8 EPEL, hãy chạy lệnh sau:

sudo dnf install epel-release

Khi được yêu cầu xác nhận cài đặt, hãy nhập và nhập y.

Bây giờ bạn có quyền truy cập vào repository lưu trữ bổ sung, hãy cài đặt tất cả các gói được yêu cầu:

sudo dnf install certbot python3-certbot-nginx

Thao tác này sẽ tự cài đặt Certbot và plugin Nginx cho Certbot, cần thiết để chạy chương trình.

Quá trình cài đặt sẽ hỏi bạn về việc nhập khóa GPG. Xác nhận nó để quá trình cài đặt có thể hoàn tất.

Bây giờ bạn đã cài đặt ứng dụng Let’s Encrypt, nhưng trước khi lấy chứng chỉ, bạn cần đảm bảo rằng tất cả các cổng được yêu cầu đều đang mở. Để thực hiện việc này, bạn sẽ cập nhật cài đặt tường lửa của mình trong bước tiếp theo.

Bước 2: Cập nhật Firewall Rules

Vì thiết lập điều kiện tiên quyết của bạn cho phép firewalld, bạn sẽ cần điều chỉnh cài đặt tường lửa để cho phép các kết nối bên ngoài trên máy chủ web Nginx của bạn.

Để kiểm tra dịch vụ nào đã được kích hoạt, hãy chạy lệnh:

sudo firewall-cmd --permanent --list-all

Nếu bạn không thấy http trong danh sách service, hãy kích hoạt nó bằng cách chạy:

sudo firewall-cmd --permanent --add-service=http

Cho phép chạy https (mở port 443):

sudo firewall-cmd --permanent --add-service=https

Reload firewall service:

sudo firewall-cmd --reload

Bước 3:   Đăng ký chứng chỉ

Bây giờ bạn có thể gửi 1 yêu cầu một SSL Certificate cho domain của bạn.

Khi tạo Chứng chỉ SSL cho Nginx bằng ứng dụng certbot Let’s Encrypt, ứng dụng khách sẽ tự động lấy và cài đặt chứng chỉ SSL mới hợp lệ cho các miền được cung cấp dưới dạng tham số.

Nếu bạn muốn cài đặt một chứng chỉ hợp lệ cho nhiều tên miền hoặc tên miền phụ, bạn có thể chuyển chúng dưới dạng tham số bổ sung cho lệnh. Tên miền đầu tiên trong danh sách tham số sẽ là miền cơ sở được Let’s Encrypt sử dụng để tạo chứng chỉ và vì lý do đó, bạn sẽ chuyển tên miền cấp cao nhất như đầu tiên trong danh sách, theo sau là bất kỳ tên miền phụ hoặc bí danh bổ sung nào:

sudo certbot --nginx -d your_domain -d www.your_domain

Điều này chạy certbot với plugin --nginx và miền cơ sở sẽ là your_domain. Để thực hiện cài đặt tương tác và lấy chứng chỉ chỉ bao gồm một miền duy nhất, hãy chạy lệnh certbot với:

sudo certbot --nginx -d your_domain

Tiện ích certbot cũng có thể nhắc bạn về thông tin miền trong quá trình yêu cầu chứng chỉ. Để sử dụng chức năng này, hãy gọi certbot mà không có bất kỳ miền nào:

sudo certbot --nginx

Kiếm trả thông tin domain sau khi đăng ký chứng chỉ

https://www.ssllabs.com/ssltest/analyze.html?d=your_domain

Bước 4:  Thiết lập tự động gia hạn

Chứng chỉ Let’s Encrypt có hiệu lực trong 90 ngày, nhưng bạn nên gia hạn chứng chỉ sau mỗi 60 ngày để hạn chế sai sót. Ứng dụng Certbot Let’s Encrypt có lệnh gia hạn tự động kiểm tra các chứng chỉ hiện đã được cài đặt và cố gắng gia hạn chúng nếu chúng còn cách ngày hết hạn chưa đầy 30 ngày.

Bạn có thể kiểm tra tính năng gia hạn tự động cho các chứng chỉ của mình bằng cách chạy lệnh sau:

sudo certbot renew --dry-run

Kết quả:

Output

Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/your_domain.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cert not due for renewal, but simulating renewal for dry run Plugins selected: Authenticator nginx, Installer nginx Renewing an existing certificate Performing the following challenges: http-01 challenge for monitoring.pp.ua Waiting for verification... Cleaning up challenges - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - new certificate deployed with reload of nginx server; fullchain is /etc/letsencrypt/live/your_domain/fullchain.pem - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ** DRY RUN: simulating 'certbot renew' close to cert expiry ** (The test certificates below have not been saved.) Congratulations, all renewals succeeded. The following certs have been renewed: /etc/letsencrypt/live/your_domain/fullchain.pem (success) ...

 

Lưu ý rằng nếu bạn đã tạo chứng chỉ gói với nhiều miền, thì chỉ tên miền cơ sở mới hiển thị trong đầu ra, nhưng việc gia hạn sẽ hoạt động đối với tất cả các miền có trong chứng chỉ này.

Một cách thực tế để đảm bảo chứng chỉ của bạn sẽ không bị lỗi thời là tạo một công việc cron sẽ thực hiện định kỳ lệnh gia hạn tự động cho bạn. Vì lần gia hạn đầu tiên sẽ kiểm tra ngày hết hạn và chỉ thực hiện gia hạn nếu chứng chỉ còn chưa đầy 30 ngày nữa là hết hạn, nên có thể an toàn để tạo một công việc cron chạy hàng tuần hoặc thậm chí hàng ngày.

Chỉnh sửa crontab để tạo một công việc mới sẽ chạy gia hạn hai lần mỗi ngày. Để chỉnh sửa crontab cho người dùng root, hãy chạy:

sudo crontab -e