Thứ năm, 06/08/2020 | 00:00 GMT+7

Bảo mật Apache với Lets Encrypt

Let's Encrypt là Đơn vị phát hành certificate (CA) cung cấp cách dễ dàng để lấy và cài đặt certificate TLS / SSL miễn phí, do đó cho phép HTTPS được mã hóa trên server web. Công cụ này đơn giản hóa quy trình bằng cách cung cấp một ứng dụng client là Certbot,  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, ta sẽ sử dụng Certbot để lấy certificate SSL miễn phí cho Apache trên Ubuntu 18.04 và thiết lập tự động gia hạn certificate .

Hướng dẫn này sẽ sử dụng file VirtualHost Apache riêng biệt thay vì file cấu hình mặc định. ta khuyên bạn nên tạo file VirtualHost Apache mới cho từng domain vì nó giúp tránh các lỗi phổ biến và duy trì 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 sẽ cần:

  • Một server Ubuntu 18.04 được thiết lập như thiết lập server ban đầu Ubuntu 18.04 , bao gồm user không phải root sudo và firewall.

  • Tên domain đã đăng ký. 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 một tên domain trên Namecheap , nhận một tên domain miễn phí trên Freenom hoặc sử dụng công ty đăng ký tên domain bạn muốn.

  • Cả hai bản ghi DNS sau được thiết lập cho server:

    • Một bản ghi với your_domain trỏ đến địa chỉ IP public của server.
    • Một bản ghi A với www.your_domain trỏ đến địa chỉ IP public của server .
  • Đã cài đặt Apache bằng cách làm theo Cách cài đặt Apache trên Ubuntu 18.04 . Đảm bảo rằng bạn có file VirtualHost cho domain của bạn. Hướng dẫn này sẽ sử dụng /etc/apache2/sites-available/ your_domain .conf 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 .

Certbot đang được phát triển mạnh, vì vậy các gói Certbot do Ubuntu cung cấp có xu hướng đã cũ. Tuy nhiên, các developer Certbot duy trì một kho phần mềm Ubuntu với các phiên bản cập nhật, vì vậy ta sẽ sử dụng kho đó thay thế.

Đầu tiên, thêm repository (kho):

  • sudo add-apt-repository ppa:certbot/certbot

ENTER để chấp nhận.

Cài đặt gói Apache của Certbot với apt :

  • sudo apt install python-certbot-apache

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

Bước 2 - Thiết lập certificate SSL

Certbot cần có khả năng tìm đúng VirtualHost trong cấu hình Apache để nó 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 ServerName phù hợp với domain mà bạn yêu cầu certificate.

Nếu đã làm theo bước thiết lập VirtualHost trong hướng dẫn cài đặt Apache , bạn sẽ có block VirtualHost cho domain của bạn tại /etc/apache2/sites-available/ your_domain.com .conf với lệnh ServerName đã được thiết lập thích hợp.

Để kiểm tra, mở file VirtualHost cho domain:

  • sudo nano /etc/apache2/sites-available/your_domain.conf

Tìm dòng ServerName hiện có, giống như thế này:

/etc/apache2/sites-available/your_domain.conf
...
ServerName your_domain;
...

Nếu có, hãy thoát khỏi trình chỉnh sửa và chuyển sang bước tiếp theo.

Nếu không, hãy tạo ra dòng đó phù hợp. Sau đó, lưu file, thoát khỏi trình chỉnh sửa và xác minh cú pháp của các chỉnh sửa:

  • sudo apache2ctl configtest

Nếu gặp lỗi, hãy mở lại file VirtualHost và kiểm tra bất kỳ lỗi chính tả hoặc ký tự bị thiếu nào. Khi cú pháp của file cấu hình chính xác, hãy tải lại Apache để áp dụng cấu hình mới:

  • sudo systemctl reload apache2

Certbot hiện có thể tìm thấy block VirtualHost chính xác và cập nhật nó.

Tiếp theo, cập nhật firewall để cho phép lưu lượng HTTPS.

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

Nếu bạn đã bật firewall ufw , theo khuyến nghị hướng dẫn ở phần yêu cầu, bạn sẽ cần điều chỉnh cài đặt để cho phép lưu lượng HTTPS. May mắn, Apache đă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

Kết quả có thể sẽ như thế này, nghĩa là chỉ lưu lượng HTTP được phép đến server web:

Output
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Apache                     ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Apache (v6)                ALLOW       Anywhere (v6)

Ngoài ra, để cho phép truy cập HTTPS, hãy cho phép cấu hình Apache Full và xóa cấu hình Apache thừa:

  • sudo ufw allow 'Apache Full'
  • sudo ufw delete allow 'Apache'

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

  • sudo ufw status
Output
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Apache Full                ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Apache 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 Apache sẽ quản lý cấu hình lại Apache 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 nhập như sau:

  • sudo certbot --apache -d your_domain -d www.your_domain

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

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

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

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 rồi nhấn ENTER . Cấu hình sẽ được cập nhật và Apache sẽ tải lại để chọn cài đặt mới. certbot sẽ kết thúc bằng một thông báo cho biết quá trình đã thành công và nơi lưu trữ certificate :

Output
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/your_domain/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/your_domain/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

Certificate đã được tải xuống, cài đặt và tải. Hãy thử tải lại 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 kiểm tra server của bạn bằng SSL Labs, server sẽ đạt điểm A.

Sau đây sẽ xem gia hạn Certificate .

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

Gói certbot ta cài đặt sẽ quản lý gia hạn bằng cách đưa vào /etc/cron.d , sẽ chạy hai lần một ngày và sẽ tự động gia hạn  certificate trong vòng ba mươi ngày kể từ ngày hết hạn.

Kiểm tra trạng thái của dịch vụ và đảm bảo nó đang hoạt động với lệnh:

  • sudo systemctl status certbot.timer

Bạn sẽ nhận được kết quả kiểu như sau:

Output
● certbot.timer - Run certbot twice daily
     Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
     Active: active (waiting) since Tue 2020-04-28 17:57:48 UTC; 17h ago
    Trigger: Wed 2020-04-29 23:50:31 UTC; 12h left
   Triggers: ● certbot.service

Apr 28 17:57:48 fine-turtle systemd[1]: Started Run certbot twice daily.

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

  • sudo certbot renew --dry-run

Nếu không thấy lỗi, bạn đã hoàn tất. Khi cần thiết, Certbot sẽ gia hạn certificate và tải lại Apache để thực hiệ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 khi certificate 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 khách Let's Encrypt, tải xuống certificate SSL cho domain , cấu hình Apache để sử dụng các certificate này và thiết lập 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 để tra cứu.


Tags:

Các tin trước

Cài đặt Node.js trên Ubuntu 18.04 2020-08-06
Thực hành bài LAB Toàn tập Select SQL Query 2020-08-05
Cài đặt XAMPP Trên Hệ điều hành Windows 2020-08-05
Toàn tập SQL - Bài tập Lệnh SELECT Database Toàn tập - tinh gọn nhất 2020-08-03
Cài đặt MySQL trên Ubuntu 20.04 2020-07-30
Cấu hình sudoers file trên Ubuntu và Centos 2020-07-07
Tạo sudo cho user mới trên Ubuntu 20.04 [Quickstart] 2020-06-22
Cài đặt và sử dụng Docker trên Ubuntu 20.04 2020-06-09
Cài đặt Node.js trên Ubuntu 20.04 2020-05-08
Cài đặt Java với Apt trên Ubuntu 20.04 2020-05-07