Cài đặt và cấu hình SSL Let’s Encrypt cho Apache web server trên Ubuntu 20.04

Cài đặt và cấu hình SSL Let’s Encrypt cho Apache web server trên Ubuntu 20.04

Let’s Encrypt là một Tổ Chức Cấp Chứng Chỉ (Certificate Authority – CA) hỗ trợ việc lấy và cài đặt chứng chỉ TLS/SSL miễn phí, qua đó kích hoạt kết nối HTTPS được mã hóa trên các máy chủ web. Quá trình này được đơn giản hóa nhờ công cụ Certbot, có khả năng tự động hóa hầu hết (nếu không muốn nói là tất cả) các bước cần thiết. Hiện tại, toàn bộ quy trình lấy và cài đặt chứng chỉ có thể được tự động hóa hoàn toàn trên cả Apache và Nginx.

Trong hướng dẫn này, chúng ta sẽ sử dụng Certbot để lấy chứng chỉ SSL miễn phí cho Apache trên Ubuntu 20.04 và đảm bảo chứng chỉ này được thiết lập để tự động gia hạn.

Bài hướng dẫn này sử dụng một file virtual host riêng, thay vì file cấu hình mặc định của Apache, để thiết lập trang web sẽ được bảo mật bởi Let’s Encrypt. Chúng tôi khuyến khích tạo mới các file virtual host Apache cho mỗi tên miền được lưu trữ trên máy chủ, vì điều này giúp tránh các lỗi phổ biến và giữ lại các file cấu hình mặc định như một phương án dự phòng.

Triển khai ứng dụng frontend của bạn từ GitHub bằng DataOnline App Platform. Hãy để DataOnline lo việc mở rộng ứng dụng của bạn.

Yêu cầu tiên quyết

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

  • Một máy chủ Ubuntu 20.04 đã được thiết lập theo hướng dẫn Cài đặt máy chủ ban đầu cho Ubuntu 20.04, bao gồm một người dùng không phải root có quyền sudo và đã bật firewall.
  • Một tên miền đã được đăng ký đầy đủ. Bài hướng dẫn này sử dụng your_domain làm ví dụ. Bạn có thể mua tên miền tại Namecheap, lấy miễn phí ở Freenom, hoặc sử dụng nhà đăng ký tên miền tùy chọn.
  • Đã cấu hình hai bản ghi DNS sau cho máy chủ. Bạn có thể tham khảo bài viết Giới thiệu về DNS của DataOnline để biết cách thêm chúng:
    • Bản ghi A trỏ your_domain đến địa chỉ IP công cộng của máy chủ.
    • Bản ghi A trỏ www.your_domain đến địa chỉ IP công cộng của máy chủ.
  • Đã cài đặt Apache theo hướng dẫn Cách Cài Đặt Apache trên Ubuntu 20.04. Hãy chắc chắn bạn có một file virtual host cho tên miền. Bài 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

Để lấy chứng chỉ SSL từ Let’s Encrypt, trước hết ta cần cài đặt phần mềm Certbot trên máy chủ. Ta sẽ dùng kho gói mặc định của Ubuntu cho việc này.

Ta cần hai gói: certbotpython3-certbot-apache. Gói thứ hai là plugin tích hợp Certbot với Apache, cho phép tự động lấy chứng chỉ và cấu hình HTTPS trên máy chủ web chỉ với một lệnh duy nhất.

sudo apt install certbot python3-certbot-apache

Bạn sẽ được nhắc xác nhận cài đặt bằng cách nhấn Y, rồi nhấn ENTER.

Giờ đây, Certbot đã được cài đặt trên máy chủ của bạn. Ở bước tiếp theo, chúng ta sẽ kiểm tra cấu hình Apache để chắc chắn virtual host đã được thiết lập đúng. Việc này giúp script client của Certbot tự động phát hiện các tên miền và tái cấu hình máy chủ web để dùng chứng chỉ SSL mới một cách tự động.

Bước 2 – Kiểm tra cấu hình Virtual Host của Apache

Để tự động lấy và cấu hình SSL cho máy chủ web, Certbot cần tìm được virtual host phù hợp trong các file cấu hình của Apache. Tên miền trên máy chủ sẽ được lấy từ các chỉ thị ServerName và ServerAlias được định nghĩa trong khối VirtualHost.

Nếu bạn đã làm theo bước thiết lập virtual host trong hướng dẫn cài đặt Apache, bạn sẽ có một khối VirtualHost cho tên miền tại /etc/apache2/sites-available/your_domain.conf, với các chỉ thị ServerName và ServerAlias đã thiết lập phù hợp.

Mở file virtual host cho tên miền của bạn bằng nano hoặc trình soạn thảo ưa thích:

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

Tìm dòng ServerName và ServerAlias. Chúng sẽ trông giống như sau:

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

Nếu bạn đã thiết lập ServerName và ServerAlias như vậy, hãy thoát trình soạn thảo và chuyển sang bước tiếp theo. Nếu đang dùng nano, nhấn CTRL+X, sau đó YENTER để xác nhận.

Nếu cấu hình virtual host hiện tại của bạn không giống ví dụ trên, hãy cập nhật cho khớp. Sau đó, lưu file và thoát. Tiếp theo, chạy lệnh sau để xác nhận các thay đổi:

sudo apache2ctl configtest

Bạn sẽ nhận được thông báo Syntax OK nếu không có lỗi cú pháp. Nếu có lỗi, hãy mở lại file virtual host và kiểm tra xem có lỗi gõ hay thiếu ký tự nào không. Khi file cấu hình của bạn đã chính xác, hãy tải lại Apache để áp dụng thay đổi:

sudo systemctl reload apache2

Nhờ những thay đổi này, Certbot sẽ có thể tìm khối VirtualHost phù hợp và cập nhật nó. Tiếp theo, chúng ta sẽ cập nhật firewall để cho phép lưu lượng HTTPS.

Bước 3 – Cho phép HTTPS qua Firewall

Nếu bạn đã bật tường lửa UFW theo khuyến nghị ở các bài hướng dẫn yêu cầu ban đầu, bạn cần điều chỉnh để cho phép lưu lượng HTTPS. Khi cài đặt, Apache sẽ đăng ký một số hồ sơ ứng dụng UFW khác nhau. Ta có thể tận dụng hồ sơ “Apache Full” để cho phép cả HTTP và HTTPS trên máy chủ.

Để xem loại lưu lượng nào hiện đang được cho phép, 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 chúng tôi, output có thể sẽ trông giống thế này, nghĩa là chỉ cho phép lưu lượng HTTP trên cổng 80:

Output
Status: active

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

Để cho phép thêm lưu lượng HTTPS, hãy cho phép hồ sơ “Apache Full” và xóa hồ sơ “Apache” dư thừa:

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

Kiểm tra lại:

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)

Bây giờ bạn đã sẵn sàng chạy Certbot và lấy chứng chỉ.

Bước 4 – Lấy chứng chỉ SSL

Certbot cung cấp nhiều cách để lấy chứng chỉ SSL thông qua các plugin. Plugin Apache sẽ lo việc tái cấu hình Apache và tải lại cấu hình khi cần. Để dùng plugin này, gõ lệnh:

sudo certbot --apache

Script này sẽ nhắc bạn trả lời một loạt câu hỏi để cấu hình chứng chỉ SSL. Đầu tiên, nó yêu cầu bạn nhập một địa chỉ email hợp lệ. Địa chỉ này sẽ được dùng để gửi thông báo về gia hạn và thông tin 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 nhập email hợp lệ, nhấn ENTER để sang bước tiếp theo. Bạn sẽ được hỏi xác nhận việc đồng ý với điều khoản dịch vụ của Let’s Encrypt. Bạn có thể nhấn A, rồi ENTER để đồng ý:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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 với Tổ chức Electronic Frontier Foundation (EFF) để nhận tin tức và các thông tin khác hay không. Nếu không muốn, hãy nhập N. Nếu đồng ý, nhập Y. Sau đó nhấn ENTER để tiếp tục.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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, bạn sẽ được nhắc để Certbot biết những tên miền nào bạn muốn kích hoạt HTTPS. Danh sách tên miền được lấy tự động từ cấu hình virtual host của Apache, do đó việc cấu hình đúng ServerName và ServerAlias là rất quan trọng. Nếu bạn muốn bật HTTPS cho tất cả tên miền đã liệt kê, hãy để trống và nhấn ENTER. Nếu chỉ muốn bật một vài tên miền, hãy nhập các số tương ứng, cách nhau bởi dấu phẩy hoặc dấu cách, rồi 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 output tương tự:

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

Kế tiếp, bạn sẽ được hỏi có muốn chuyển hướng (redirect) lưu lượng HTTP sang HTTPS hay không. Nếu chọn chuyển hướng, khi có ai đó truy cập website qua HTTP, họ sẽ tự động được chuyển sang HTTPS. Hãy chọn 2 để bật chuyển hướng, hoặc 1 nếu bạn muốn giữ cả hai cách truy cập HTTP và HTTPS:

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 Certbot hoàn tất và bạn sẽ thấy thông báo về chứng chỉ mới, nơi lưu trữ các file, và cách kiểm tra cấu hình:

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 đã được cài đặt và nạp vào cấu hình Apache. Hãy thử tải lại trang web bằng https:// và chú ý biểu tượng bảo mật trên trình duyệt. Nó thường hiển thị biểu tượng ổ khóa trên thanh địa chỉ, cho biết trang web đã được bảo mật đúng cách.

Bạn có thể sử dụng SSL Labs Server Test để xác thực mức độ an toàn của chứng chỉ, cũng như xem thông tin chi tiết về chứng chỉ từ góc nhìn của một dịch vụ bên ngoài.

Trong bước cuối, chúng ta sẽ kiểm tra tính năng tự động gia hạn của Certbot, đảm bảo chứng chỉ được gia hạn trước khi hết hạn.

Bước 5 – Kiểm tra tự động gia hạn của Certbot

Chứng chỉ của Let’s Encrypt chỉ có hiệu lực trong 90 ngày. Điều này khuyến khích người dùng tự động hóa quy trình gia hạn, cũng như đảm bảo rằng chứng chỉ bị lạm dụng hoặc Private Key bị đánh cắp sẽ sớm hết hạn.

Gói certbot mà ta cài đặt sẽ lo việc gia hạn nhờ một script renew trong /etc/cron.d, được quản lý bởi dịch vụ certbot.timer của systemctl. Script này chạy hai lần mỗi ngày và sẽ tự động gia hạn bất kỳ chứng chỉ nào còn dưới 30 ngày sẽ hết hạn.

Để kiểm tra trạng thái dịch vụ và chắc chắn nó đang hoạt động, dùng:

sudo systemctl status certbot.timer

Bạn sẽ thấy output tương tự:

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.

Để thử quy trình gia hạn, bạn có thể chạy lệnh mô phỏng (dry run):

sudo certbot renew --dry-run

Nếu không thấy lỗi nào, bạn đã thiết lập xong. Khi cần, Certbot sẽ gia hạn chứng chỉ và tải lại Apache để áp dụng thay đổi. Nếu quy trình tự động gia hạn gặp lỗi, Let’s Encrypt sẽ gửi thông báo đến email bạn đã chỉ định, cảnh báo khi chứng chỉ sắp hết hạn.

Kết luận

Bằng cách hoàn thành hướng dẫn này, bạn đã triển khai thành công chứng chỉ SSL từ Let’s Encrypt bằng Certbot, đảm bảo kết nối an toàn cho website của mình. Ngoài ra, bạn cũng đã kiểm tra và xác nhận quá trình tự động gia hạn chứng chỉ hoạt động đúng cách thông qua systemctl. Nếu bạn muốn tìm hiểu thêm về các tùy chọn nâng cao hoặc khắc phục sự cố liên quan đến Certbot, hãy tham khảo tài liệu chính thức để có hướng dẫn chi tiết

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *