Thứ tư, 29/04/2020 | 00:00 GMT+7

Cách bảo mật Apache bằng Let's Encrypt trên Ubuntu 20.04

Let's Encrypt là Tổ chức phát hành certificate (CA) tạo điều kiện cho việc 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 các 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, ta sẽ sử dụng Certbot để lấy certificate SSL miễn phí cho Apache trên Ubuntu 20.04 và đảm bảo certificate này được cài đặt để tự động gia hạn.

Hướng dẫn này sử dụng file server ảo riêng biệt thay vì file cấu hình mặc định của Apache để cài đặt trang web sẽ được bảo mật bằng Let's Encrypt. Ta khuyên bạn nên tạo file server ảo Apache mới cho từng domain được lưu trữ trong server , vì nó giúp tránh các lỗi thường gặp và duy trì file cấu hình mặc định dưới dạng cài đặt 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 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 your_domain làm ví dụ 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.

    • Một bản ghi với your_domain 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. your_domain trỏ đến địa chỉ IP công cộng của server của bạn.
  • Đã cài đặt Apache theo Cách cài đặt Apache trên Ubuntu 20.04 . Đảm bảo rằng bạn có tệp server ảo 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

Để có được certificate SSL với Let's Encrypt, trước tiên ta cần cài đặt phần mềm Certbot trên server của bạn. Ta sẽ sử dụng repository Ubuntu mặc định cho việc đó.

Ta cần hai gói: certbotpython3-certbot-apache . Sau này là một plugin tích hợp Certbot với Apache, giúp bạn có thể tự động lấy certificate và cấu hình HTTPS trong web server của bạn bằng một lệnh duy nhất.

  • sudo apt install certbot python3-certbot-apache

Bạn sẽ được yêu cầu xác nhận cài đặt bằng cách nhấn Y , sau đó ENTER .

Certbot hiện đã được cài đặt trên server của bạn. Trong bước tiếp theo, ta sẽ xác minh cấu hình của Apache đảm bảo server ảo của bạn được đặt phù hợp. Điều này sẽ đảm bảo tập lệnh ứng dụng client certbot sẽ có thể phát hiện các domain của bạn và cấu hình lại web server của bạn để tự động sử dụng certificate SSL mới được tạo của bạn.

Bước 2 - Kiểm tra cấu hình server ảo Apache của bạn

Để có thể tự động lấy và cấu hình SSL cho web server của bạn, Certbot cần tìm đúng server ảo trong các file cấu hình Apache của bạn. (Các) domain server của bạn sẽ được truy xuất từ chỉ thị ServerNameServerAlias được xác định trong đoạn cấu hình VirtualHost của bạn.

Nếu bạn đã làm theo bước cài đặt server ảo trong hướng dẫn cài đặt Apache , bạn nên cài đặt đoạn VirtualHost cho domain của bạn tại /etc/apache2/sites-available/ your_domain .conf với ServerName và cả các lệnh ServerAlias đã được cài đặt thích hợp.

Để kiểm tra điều này, hãy mở file server ảo cho domain của bạn bằng nano hoặc editor bạn muốn :

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

Tìm các dòng ServerNameServerAlias hiện có. Chúng sẽ trông như thế này:

/etc/apache2/sites-available/your_domain.conf
... ServerName your_domain ServerAlias www.your_domain ... 

Nếu bạn đã cài đặt ServerNameServerAlias như thế này, bạn có thể thoát khỏi editor của bạn và chuyển sang bước tiếp theo. Nếu đang sử dụng nano , bạn có thể thoát bằng lệnh CTRL+X , sau đó là YENTER để xác nhận.

Nếu cấu hình server ảo hiện tại của bạn không trùng với ví dụ, hãy cập nhật nó cho phù hợp. Khi bạn hoàn tất, hãy lưu file và thoát khỏi editor . Sau đó, chạy lệnh sau để xác thực các thay đổi :

  • sudo apache2ctl configtest

Bạn sẽ nhận được Syntax OK làm phản hồi. Nếu bạn gặp lỗi, hãy mở lại file server ảo 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 Apache để các thay đổi có hiệu lực:

  • sudo systemctl reload apache2

Với những thay đổi này, Certbot sẽ có thể tìm thấy đoạn VirtualHost chính xác và cập nhật nó.

Tiếp theo, ta sẽ 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 đề xuất của 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. Sau khi cài đặt, Apache đăng ký một số cấu hình ứng dụng UFW khác nhau. Ta có thể tận dụng profile Apache Full để cho phép cả truy cập HTTP và HTTPS trên server của bạn.

Để xác minh loại lưu lượng nào hiện được phép trên server của bạn, bạn có thể sử dụng:

  • sudo ufw status

Nếu bạn đã làm theo một trong các hướng dẫn cài đặt Apache của ta , kết quả của bạn sẽ trông giống như thế này, nghĩa là chỉ truy cập HTTP trên cổng 80 hiện được phép:

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 lưu lượng 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 của bạn bây giờ sẽ như thế này:

  • 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)

Đến đây bạn đã sẵn sàng để chạy Certbot và lấy certificate của bạn .

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ẽ đảm nhiệm việc cấu hình lại Apache 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 --apache

Tập lệnh này sẽ nhắc bạn trả lời một loạt câu hỏi để cấu hình certificate SSL của bạn. Đầu tiên, nó sẽ yêu cầu bạn cung cấp một địa chỉ e-mail hợp lệ. Email này sẽ được sử dụng cho các thông báo gia hạn và thông báo bảo mật:

Output
Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator apache, Installer apache Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): you@your_domain

Sau khi cung cấp một địa chỉ e-mail hợp lệ, hãy nhấn ENTER để chuyển sang bước tiếp theo. Sau đó, bạn sẽ được yêu cầu xác nhận nếu bạn đồng ý với các điều khoản dịch vụ của Let's Encrypt. Bạn có thể xác nhận bằng cách nhấn A rồi ENTER :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must agree in order to register with the ACME server at https://acme-v02.api.letsencrypt.org/directory - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (A)gree/(C)ancel: A 

Tiếp theo, bạn sẽ được hỏi liệu bạn có muốn chia sẻ email của bạn với Electronic Frontier Foundation để nhận tin tức và thông tin khác hay không. Nếu bạn không muốn đăng ký nội dung của họ, hãy nhập N Nếu không, hãy nhập Y Sau đó, nhấn ENTER để chuyển sang bước tiếp theo.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: N 

Bước tiếp theo sẽ nhắc bạn thông báo cho Certbot về những domain bạn muốn kích hoạt HTTPS. Các domain được liệt kê được tự động lấy từ cấu hình server ảo Apache của bạn, đó là lý do tại sao điều quan trọng là bạn phải đảm bảo bạn có cài đặt ServerNameServerAlias chính xác được cấu hình trong server ảo của bạn . Nếu bạn muốn bật HTTPS cho tất cả các domain được liệt kê ( được khuyến khích ), bạn có thể để trống dấu nhắc và nhấn ENTER để tiếp tục. Nếu không, hãy chọn domain bạn muốn bật HTTPS bằng cách liệt kê từng số thích hợp, phân tách bằng dấu phẩy và / hoặc dấu cách, sau đó nhấn ENTER .

Which names would you like to activate HTTPS for? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: your_domain 2: www.your_domain - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel):  

Bạn sẽ thấy kết quả như thế này:

Obtaining a new certificate Performing the following challenges: http-01 challenge for your_domain http-01 challenge for www.your_domain Enabled Apache rewrite module Waiting for verification... Cleaning up challenges Created an SSL vhost at /etc/apache2/sites-available/your_domain-le-ssl.conf Enabled Apache socache_shmcb module Enabled Apache ssl module Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf Enabling available site: /etc/apache2/sites-available/your_domain-le-ssl.conf Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf 

Tiếp theo, bạn sẽ được yêu cầu chọn xem bạn có muốn chuyển hướng truy cập HTTP đến HTTPS hay không. Trên thực tế, điều đó nghĩa là khi ai đó truy cập trang web thông qua các kênh không được mã hóa (HTTP), họ sẽ tự động được chuyển hướng đến địa chỉ HTTPS của trang web . Chọn 2 để bật chuyển hướng hoặc 1 nếu bạn muốn giữ cả HTTP và HTTPS làm phương thức truy cập trang web riêng biệt.

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): 2  

Sau bước này, cấu hình của Certbot đã hoàn tất và bạn sẽ thấy những comment cuối cùng về certificate mới của bạn , nơi định vị các file được tạo và cách kiểm tra cấu hình của bạn bằng một công cụ bên ngoài phân tích tính xác thực của certificate :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations! You have successfully enabled https://your_domain and https://www.your_domain  You should test your configuration at: https://www.ssllabs.com/ssltest/analyze.html?d=your_domain https://www.ssllabs.com/ssltest/analyze.html?d=www.your_domain - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  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 2020-07-27. 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 hiện đã được cài đặt và tải vào cấu hình của Apache. Hãy thử reload trang web bằng https:// và để ý chỉ báo bảo mật của trình duyệt. Nó sẽ cho biết trang web được bảo mật đúng cách, thường bằng cách bao gồm biểu tượng khóa trong thanh địa chỉ.

Bạn có thể sử dụng Kiểm tra server SSL Labs để xác minh cấp certificate của bạn và nhận thông tin chi tiết về certificate đó, từ quan điểm của một dịch vụ bên ngoài.

Trong bước tiếp theo và cuối cùng, ta sẽ thử nghiệm tính năng tự động gia hạn của Certbot, đảm bảo certificate của bạn sẽ tự động được gia hạn trước ngày hết 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ọ, cũng như đảm bảo rằng các certificate bị lạm dụng hoặc khóa bị đánh cắp sẽ hết hạn sớm hơn là muộn hơn.

Các certbot gói ta cài đặt sẽ chăm sóc của gia hạn bằng cách bao gồm một kịch bản mới để /etc/cron.d , được quản lý bởi một systemctl dịch vụ gọi là certbot.timer . 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 trạng thái của dịch vụ này và đảm bảo nó đang đang chạy , bạn có thể sử dụng:

  • sudo systemctl status certbot.timer

Bạn sẽ nhận được kết quả tương tự 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ử 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 Apache để áp dụng 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, cấu hình và cài đặt certificate SSL cho domain của bạn và xác nhận dịch vụ gia hạn tự động của Certbot đang hoạt động trong systemctl . 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 web server Apache trên Ubuntu 20.04 [Quickstart]
2020-04-28
Cách cài đặt web server Apache trên Ubuntu 20.04
2020-04-27
Cách cài đặt web server Apache trên CentOS 8
2020-04-24
Cách thiết lập server ảo Apache trên Ubuntu 18.04 [Quickstart]
2020-02-19
Các bước được đề xuất để ngăn chặn HTTP Apache trên FreeBSD 12.0
2020-02-12
Cách thiết lập server ảo Apache trên Ubuntu 18.04
2020-02-10
Cách thiết lập xác thực mật khẩu với Apache trên Ubuntu 18.04 [Quickstart]
2020-02-04
Cách thiết lập xác thực mật khẩu với Apache trên Ubuntu 18.04
2020-02-03
Cách cài đặt Apache Kafka trên Debian 10
2019-12-20
Cách sử dụng Ansible để cài đặt và thiết lập Apache trên Ubuntu 18.04
2019-12-06