Bảo mật Nginx bằng Let’s Encrypt trên Ubuntu

Giới thiệu

Let’s Encrypt là Cơ quan cấp chứng chỉ (CA) cung cấp một cách dễ dàng để lấy và cài đặt chứng chỉ TLS/SSL miễn phí , từ đó cho phép HTTPS được mã hóa trên 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 khách phần mềm, Certbot, cố gắng 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, 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.

Yêu cầu

Để làm theo hướng dẫn này, bạn sẽ cần:

  • Một máy chủ Ubuntu 20.04
  • Một tên miền đã đăng ký. Hướng dẫn này sẽ sử dụng example.com.
  • Cả hai bản ghi DNS sau đây đều được thiết lập cho máy chủ của bạn. Nếu bạn đang sử dụng DigitalOcean, vui lòng xem tài liệu DNS của chúng tôi để biết chi tiết về cách thêm chúng.
    • A record example.com trỏ đến địa chỉ IP public của máy chủ của bạn.
    • A record www.example.com trỏ đến địa chỉ IP public của máy chủ của bạn.
  • Cài đặt Nginx. Ví dụ: /etc/nginx/sites-available/example.com

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

Bước đầu tiên để sử dụng Let’s Encrypt để lấy chứng chỉ SSL là cài đặt phần mềm Certbot trên máy chủ của bạn.

Cài đặt Certbot và đó là plugin Nginx với apt:

sudo apt install certbot python3-certbot-nginx

Certbot hiện đã sẵn sàng để sử dụng, nhưng để nó tự động định cấu hình SSL cho Nginx, chúng ta cần xác minh một số cấu hình của Nginx.

Bước 2 – Xác nhận cấu hình của Nginx

Certbot cần có khả năng tìm thấy server chính xác trong cấu hình Nginx của bạn để có thể tự động định cấu hình SSL. Cụ thể, nó thực hiện điều này bằng cách tìm kiếm 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 máy chủ trong hướng dẫn cài đặt Nginx , cấu hình /etc/nginx/sites-available/example.com

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

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

Tìm server_name dòng hiện có:

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

Thoát trình chỉnh sửa của bạn và chuyển sang bước tiếp theo.

Nếu không, hãy cập nhật nó cho phù hợp. Sau đó lưu tệp, thoát trình chỉnh sửa và xác minh cú pháp chỉnh sửa cấu hình của bạn:

sudo nginx -t

Nếu bạn gặp lỗi, hãy mở lại tệp khối máy chủ và kiểm tra xem có lỗi chính tả hoặc ký tự bị thiếu nào không. Khi cú pháp tệp cấu hình của bạn chính xác, hãy tải lại Nginx để tải cấu hình mới:

sudo systemctl reload nginx

Certbot hiện có thể tìm đúng server và tự động cập nhật.

Bước 3 – Lấy chứng chỉ SSL

Certbot cung cấp nhiều cách khác nhau để lấy chứng chỉ SSL thông qua plugin. 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. Để sử dụng plugin này, hãy gõ như sau:

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

Điều này chạy certbot với --nginx plugin, sử dụng -d để chỉ định tên miền mà chúng tôi muốn chứng chỉ hợp lệ.

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 khi làm như vậy, certbot nó sẽ liên lạc với máy chủ Let’s Encrypt, sau đó xác minh rằng bạn kiểm soát miền mà bạn đang yêu cầu chứng chỉ.

Nếu thành công, certbot nó sẽ hỏi bạn muốn định cấu hình cài đặt HTTPS của mình như thế nào.

OutputPlease 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 lựa chọn của bạn sau đó nhấn ENTER. Cấu hình sẽ được cập nhật và Nginx sẽ tải lại để nhận các cài đặt mới. certbotsẽ 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 lưu trữ chứng chỉ của bạn:

OutputIMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
   Your cert will expire on 2020-08-18. 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

Chứng chỉ của bạn được tải xuống, cài đặt và tải. Hãy thử tải lại trang web của bạn bằng cách sử dụng https://và chú ý đến chỉ báo bảo mật của trình duyệt. Nó phải chỉ ra rằng trang web được bảo mật đúng cách, thường có biểu tượng khóa. Nếu bạn kiểm tra máy chủ của mình bằng Kiểm tra máy chủ SSL Labs thì máy chủ sẽ đạt điểm A.

Hãy kết thúc bằng cách kiểm tra quá trình gia hạn.

Bước 5 – Xác minh tính năng tự động gia hạn của Certbot

Chứng chỉ của Let’s Encrypt chỉ có hiệu lực trong 90 ngày. Điều này nhằm khuyến khích người dùng tự động hóa quy trình gia hạn chứng chỉ của họ. Gói certbot chúng tôi đã cài đặt sẽ giải quyết vấn đề này cho chúng tôi bằng cách thêm bộ đếm thời gian systemd sẽ chạy hai lần một ngày và tự động gia hạn bất kỳ chứng chỉ nào trong vòng ba mươi ngày kể từ ngày 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 certbot.timer
Output● certbot.timer - Run certbot twice daily
     Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
     Active: active (waiting) since Mon 2020-05-04 20:04:36 UTC; 2 weeks 1 days ago
    Trigger: Thu 2020-05-21 05:22:32 UTC; 9h left
   Triggers: ● certbot.service

Để kiểm tra quá trình gia hạn, bạn có thể chạy thử với certbot:

sudo certbot renew --dry-run

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

Phần kết luận

Trong hướng dẫn này, bạn đã cài đặt ứng dụng khách Let’s Encrypt certbot, tải xuống chứng chỉ SSL cho miền của mình, định cấu hình Nginx để sử dụng các chứng chỉ này và thiết lập gia hạn chứng chỉ tự động

Related Posts

Leave a Reply

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