Cách bảo mật Nginx bằng Let's Encrypt trên Ubuntu 20.04
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í, do đó 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 Ubuntu 20.04 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 cấu hình 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 Ubuntu 20.04 được cài đặt theo cài đặt server ban đầu này cho hướng dẫn Ubuntu 20.04 , bao gồm một user không phải root đã kích hoạt sudo và firewall . 
- Tên domain đã đăng ký. Hướng dẫn này sẽ sử dụng - example.comxuyên suốt. Bạn có thể mua một domain từ Namecheap , nhận một domain miễn phí với 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. Nếu bạn đang sử dụng DigitalOcean, vui lòng xem tài liệu DNS của ta để biết chi tiết về cách thêm chúng. -  Bản ghi A với example.comtrỏ đế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.comtrỏ đến địa chỉ IP công cộng của server của bạn.
 
-  Bản ghi A với 
- Đã cài đặt Nginx theo Cách cài đặt Nginx trên Ubuntu 20.04 . Đả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.comlà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.
 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 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 lệnh server_name phù hợp với domain  bạn certificate request .
 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  cài đặt  thích hợp.
 Để kiểm tra, hãy mở file  cấu hình 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:
... 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 của 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ó tự động.
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 , theo khuyến nghị của hướng dẫn  yêu cầu , bạn  cần  điều chỉnh cài đặt để cho phép lưu lượng truy cập HTTPS.  May mắn là  Nginx đăng ký một số cấu hình với ufw khi cài đặt.
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 :
OutputStatus: active  To                         Action      From --                         ------      ---- OpenSSH                    ALLOW       Anywhere                   Nginx HTTP                 ALLOW       Anywhere                   OpenSSH (v6)               ALLOW       Anywhere (v6)              Nginx HTTP (v6)            ALLOW       Anywhere (v6) Ngoài ra, để 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 
OutputStatus: 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 các domain  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.
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 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:
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  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. 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 vấn đề này cho  ta  bằng cách thêm bộ hẹn giờ systemd sẽ chạy hai lần một ngày và 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.
 Bạn có thể truy vấn trạng thái của bộ hẹn giờ với 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ể 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 chính thức là  một nơi tốt để tham khảo .
Các tin liên quan
Cách cung cấp các ứng dụng Flask với Gunicorn và Nginx trên Ubuntu 20.042020-05-20
Cách cài đặt và cấu hình Laravel với Nginx trên Ubuntu 20.04
2020-05-19
Cách cài đặt Nginx trên Ubuntu 18.04
2020-05-06
Cách cài đặt Nginx trên Ubuntu 20.04 [Quickstart]
2020-05-04
Cách cài đặt Nginx trên Ubuntu 20.04
2020-04-24
Cách tối ưu hóa cấu hình Nginx
2020-03-26
Cách thiết lập Laravel, Nginx và MySQL với Docker Compose
2020-03-09
Cách cài đặt Nginx trên CentOS 8
2020-03-03
Cách thiết lập Django với Postgres, Nginx và Gunicorn trên Debian 10
2019-07-25
Cách tạo chứng chỉ SSL tự ký cho Nginx trên Debian 10
2019-07-15
 

