Thứ tư, 05/09/2018 | 00:00 GMT+7

Cách bảo mật Nginx bằng Let's Encrypt trên Debian 9

Let's Encrypt là Tổ chức phát hành certificate (CA) cung cấp cách dễ dàng để lấy và cài đặt chứng chỉ TLS / SSL miễn phí, cho phép HTTPS được mã hóa trên web server . Nó đơn giản hóa quy trình bằng cách cung cấp một ứng dụng client , 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 certificate 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 certificate SSL miễn phí cho Nginx trên Debian 9 và cài đặt tự động gia hạn certificate của bạn.

Hướng dẫn này sẽ sử dụng file khối server Nginx riêng biệt thay vì file mặc định. Ta khuyên bạn nên tạo file khối server Nginx mới cho mỗi domain vì nó giúp tránh các lỗi thường gặp và duy trì các file mặc định dưới dạng cấu hình dự phòng.

Yêu cầu

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

  • Một server Debian 9, được cài đặt theo hướng dẫn cài đặt server ban đầu này cho Debian 9 , cùng với một user không phải root có quyền sudo và firewall .
  • Tên domain đã đăng ký đầy đủ. Hướng dẫn này sẽ sử dụng example.com xuyên suốt. Bạn có thể mua domain trên Namecheap , nhận một domain miễn phí trên Freenom hoặc sử dụng công ty đăng ký domain mà bạn chọn.
  • Cả hai bản ghi DNS sau được cài đặt cho server của bạn. Bạn có thể theo dõi phần giới thiệu này về DigitalOcean DNS để biết chi tiết về cách thêm chúng.

    • Bản ghi A với example.com trỏ đến địa chỉ IP công cộng của server của bạn.
    • Một bản ghi A với www. example.com trỏ đến địa chỉ IP công cộng của server của bạn.
  • Đã cài đặt Nginx theo Cách cài đặt Nginx trên Debian 9 . Đảm bảo rằng bạn có khối server cho domain của bạn . Hướng dẫn này sẽ sử dụng /etc/nginx/sites-available/ example.com làm ví dụ.

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

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

Certbot đang được phát triển rất tích cực, vì vậy các gói Certbot do Debian cung cấp với các bản phát hành ổn định hiện tại có xu hướng lỗi thời. Tuy nhiên, ta có thể có được một gói cập nhật hơn bằng cách bật repository backports Debian 9 trong /etc/apt/sources.list , nơi trình quản lý gói apt tìm kiếm các nguồn gói. Kho lưu trữ backports bao gồm các gói đã biên dịch lại có thể chạy mà không có thư viện mới trên các bản phân phối Debian ổn định.

Để thêm repository backports, trước tiên hãy mở /etc/apt/sources.list :

  • sudo nano /etc/apt/sources.list

Ở cuối file , thêm các bản sao sau từ dự án Debian:

/etc/apt/sources.list
... deb http://deb.debian.org/debian stretch-backports main contrib non-free deb-src http://deb.debian.org/debian stretch-backports main contrib non-free 

Điều này bao gồm các gói main , tuân theo Nguyên tắc Phần mềm Miễn phí Debian (DFSG) , cũng như các thành phần contribnon-free , bản thân không tuân theo DFSG hoặc bao gồm các thành phần phụ thuộc trong danh mục này.

Lưu file khi bạn hoàn tất.

Cập nhật danh sách gói để nhận thông tin gói của repository mới:

  • sudo apt update

Và cuối cùng, cài đặt gói Nginx của Certbot với apt :

  • sudo apt install python-certbot-nginx -t stretch-backports

Certbot hiện đã sẵn sàng để sử dụng, nhưng để nó cấu hình SSL cho Nginx, 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 đúng khối server trong cấu hình Nginx của bạn để có thể tự động cấu hình SSL. Cụ thể, nó thực hiện điều này bằng cách tìm kiếm chỉ thị server_name phù hợp với domain bạn yêu cầu.

Nếu bạn đã làm theo bước cài đặt khối server trong hướng dẫn cài đặt Nginx , bạn sẽ có một khối server cho domain của bạn tại /etc/nginx/sites-available/ example.com với chỉ thị server_name đã được đặt phù hợp.

Để kiểm tra, hãy mở file khối server cho domain của bạn bằng nano hoặc editor yêu thích của bạn:

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

Tìm dòng server_name hiện có. Nó sẽ giống như thế này:

/etc/nginx/sites-available/example.com
... server_name example.com www.example.com; ... 

Nếu có, hãy thoát khỏi editor và chuyển sang bước tiếp theo.

Nếu không, hãy cập nhật nó để phù hợp. Sau đó, lưu file , thoát khỏi editor 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

Nếu bạn gặp lỗi, hãy mở lại file khối server 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 file cấu hình của bạn chính xác, hãy reload Nginx để tải cấu hình mới:

  • sudo systemctl reload nginx

Certbot hiện có thể tìm thấy khối server chính xác và cập nhật nó.

Tiếp theo, hãy cập nhật firewall để cho phép truy cập HTTP S.

Bước 3 - Cho phép HTTPS thông qua firewall

Nếu bạn đã bật firewall ufw , như được đề xuất trong hướng dẫn yêu cầu , bạn cần điều chỉnh cài đặt để cho phép truy cập HTTP S.

Bạn có thể xem cài đặt hiện tại bằng lệnh :

  • sudo ufw status

Nó có thể sẽ giống như thế này, nghĩa là chỉ truy cập HTTP được phép đến web server :

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)

Để cho phép lưu lượng truy cập HTTPS, hãy cho phép cấu hình Nginx Full và xóa phụ cấp cấu hình HTTP Nginx dư thừa:

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

Trạng thái của bạn bây giờ sẽ giống như sau:

  • sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)

Tiếp theo, hãy chạy Certbot và tìm nạp certificate của ta .

Bước 4 - Lấy certificate SSL

Certbot cung cấp nhiều cách khác nhau để lấy certificate SSL thông qua các plugin. Plugin Nginx sẽ xử lý việc cấu hình lại Nginx và reload cấu hình khi nào cần thiết. Để sử dụng plugin này, hãy nhập như sau:

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

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

Nếu đây là lần đầu tiên bạn chạy certbot , 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, certbot sẽ giao tiếp với server Let's Encrypt, sau đó chạy thử thách để xác minh bạn kiểm soát domain mà bạn đang certificate request .

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

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 lựa chọn của bạn rồi nhấn ENTER . Cấu hình sẽ được cập nhật và Nginx sẽ reload để chọ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 lưu trữ certificate của bạn:

Output
IMPORTANT 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 2018-07-23. 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

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

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

Bước 5 - Xác minh Tự động gia hạn Certbot

Chứng chỉ của Let's Encrypt chỉ có giá trị trong chín mươi ngày. Điều này nhằm khuyến khích user tự động hóa quy trình gia hạn certificate của họ. Gói certbot mà ta đã cài đặt sẽ giải quyết việc này cho ta bằng cách thêm tập lệnh gia hạn vào /etc/cron.d . Tập lệnh này chạy hai lần một ngày và sẽ tự động gia hạn bất kỳ certificate nào trong vòng ba mươi ngày kể từ ngày hết hạn.

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

  • sudo certbot renew --dry-run

Nếu bạn không thấy lỗi, bạn đã hoàn tất. Khi cần thiết, Certbot sẽ gia hạn certificate của bạn và reload 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 một thông báo đến email bạn đã chỉ định, cảnh báo cho bạn khi certificate của bạn sắp hết hạn.

Kết luận

Trong hướng dẫn này, bạn đã cài đặt certbot ứng dụng client Let's Encrypt, download certificate SSL cho domain của bạn, cấu hình Nginx để sử dụng các certificate này và cài đặt gia hạn certificate tự động. Nếu bạn có thêm câu hỏi về việc sử dụng Certbot, tài liệu của họ là một nơi tốt để tham khảo .


Tags:

Các tin liên quan

Cách cài đặt Nginx trên Debian 9
2018-09-04
Cách cài đặt Nginx trên Ubuntu 18.04 [Quickstart]
2018-07-23
Cách cung cấp các ứng dụng Flask với Gunicorn và Nginx trên Ubuntu 18.04
2018-07-13
Cách di chuyển web root Nginx đến vị trí mới trên Ubuntu 18.04
2018-07-12
Cách cấu hình Jenkins với SSL bằng Nginx Reverse Proxy trên Ubuntu 18.04
2018-07-10
Cách thiết lập Django với Postgres, Nginx và Gunicorn trên Ubuntu 18.04
2018-07-09
Cách tạo chứng chỉ SSL tự ký cho Nginx trong Ubuntu 18.04
2018-07-05
Cách bảo mật Nginx bằng Let's Encrypt trên FreeBSD
2018-07-02
Cách bảo mật Nginx bằng Let's Encrypt trên Ubuntu 18.04
2018-04-27
Cách cài đặt và bảo mật phpMyAdmin với Nginx trên Ubuntu 16.04
2018-04-12