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 .
- Một bản ghi với
-
Đã 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:
...
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:
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
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:
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 :
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:
● 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.
Các tin trước
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 bằng apt trên Ubuntu 18.04 2020-05-07 Cài đặt và cấu hình VNC trên Ubuntu 18.04 2020-05-07