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_domaintrỏ đế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_domaintrỏ đến địa chỉ IP công cộng của server của bạn.
 
-  Một bản ghi với 
- Đã 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 .conflà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: certbot và python3-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ị ServerName và ServerAlias đượ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 ServerName và ServerAlias hiện có. Chúng sẽ trông như thế này:
... ServerName your_domain ServerAlias www.your_domain ... Nếu bạn đã  cài đặt  ServerName và ServerAlias 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à Y và ENTER để 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:
OutputStatus: 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 
OutputStatus: 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:
OutputSaving 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 ServerName và ServerAlias 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 .
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
 

