DataOnline sẽ hướng dẫn cách Bảo Mật Apache. Bạn sẽ sử dụng Certbot để lấy chứng chỉ SSL miễn phí cho Apache trên Ubuntu và đảm bảo rằng chứng chỉ này được cấu hình để tự động gia hạn.
Let’s Encrypt là một Certificate Authority (CA) giúp bạn lấy và cài đặt các chứng chỉ TLS/SSL miễn phí, từ đó kích hoạt HTTPS mã hóa trên máy chủ web. Let’s Encrypt đơn giản hóa quy trình bằng cách cung cấp một phần mềm khách hàng, Certbot, cố gắ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 nay, toàn bộ quá trình lấy và cài đặt chứng chỉ được tự động hóa hoàn toàn trên cả Apache và Nginx.
Để bảo mật Apache trên Ubuntu 22.04, bạn cần một server ổn định. Khám phá các gói VPS giá rẻ tại DataOnline, cung cấp hiệu suất cao, bảo mật tối ưu, giúp bạn triển khai website an toàn với chi phí tiết kiệm. Tìm hiểu ngay để chọn giải pháp phù hợp!
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 website sẽ được bảo mật bởi Let’s Encrypt. Chúng tôi khuyến khích tạo các file Virtual Host mới cho mỗi tên miền host trên server, 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.
Yêu cầu trước khi cài đặt bảo mật Apache với Let’s Encrypt
Để làm theo hướng dẫn này, bạn cần:
- Một server Ubuntu đã được thiết lập với tài khoản non-root có quyền sudo và firewall đã được bật. (Bạn có thể tham khảo hướng dẫn cài đặt ban đầu cho Ubuntu.)
- Một tên miền đã được đăng ký đầy đủ. Trong hướng dẫn này, tên miền ví dụ sẽ là
your_domain
. Bạn có thể mua tên miền trên Namecheap, lấy miễn phí trên Freenom, hoặc sử dụng nhà đăng ký tên miền khác theo ý bạn. - Cài đặt hai bản ghi DNS cho server của bạn.
- Một bản ghi A với
your_domain
trỏ về địa chỉ IP công cộng của server. - Một bản ghi A với
www.your_domain
trỏ về địa chỉ IP công cộng của server.
- Một bản ghi A với
- Apache đã được cài đặt theo hướng dẫn Cách Cài Đặt Apache Trên Ubuntu. Hãy chắc chắn rằng bạn có một file Virtual Host cho tên miền của bạn. Trong hướng dẫn này, ví dụ sử dụng file:
/etc/apache2/sites-available/your_domain.conf
.
Bước 1 – Cài đặt Certbot
Để lấy chứng chỉ SSL với Let’s Encrypt, bạn cần cài đặt phần mềm Certbot trên server. Bạn sẽ sử dụng các kho gói mặc định của Ubuntu để cài đặt.
Đầu tiên, cập nhật danh sách gói cục bộ:
sudo apt update
Bạn cần cài đặt hai gói: certbot
và python3-certbot-apache
. Gói thứ hai là một plugin tích hợp Certbot với Apache, giúp tự động lấy chứng chỉ và cấu hình HTTPS cho máy chủ web chỉ với một lệnh:
sudo apt install certbot python3-certbot-apache
Khi được nhắc, nhấn Y
và ENTER
để xác nhận cài đặt.
Giờ Certbot đã được cài đặt trên server của bạn. Trong bước tiếp theo, bạn sẽ kiểm tra cấu hình Apache để đảm bảo Virtual Host của bạn được thiết lập đúng. Điều này giúp Certbot có thể phát hiện tên miền và tự động cấu hình lại máy chủ web để sử dụng chứng chỉ SSL mới tạo.
Bước 2 – Kiểm tra cấu hình Apache Virtual Host
Để 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 của server sẽ được lấy từ các chỉ thị ServerName
và ServerAlias
được định nghĩa trong khối cấu hình 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 được cấu hình cho tên miền của mình tại /etc/apache2/sites-available/your_domain.conf
với các chỉ thị ServerName
và ServerAlias
đã được thiết lập phù hợp.
Để xác nhận việc cấu hình này, hãy mở file Virtual Host của tên miền bằng nano hoặc trình soạn thảo ưa thích của bạn:
sudo nano /etc/apache2/sites-available/your_domain.conf
với các chỉ thị ServerName
và ServerAlias
được thiết lập đúng.
Để xác nhận, hãy mở file Virtual Host của bạn bằng nano (hoặc trình soạn thảo ưa thích):
/etc/apache2/sites-available/your_domain.conf ... ServerName your_domain ServerAlias www.your_domain ...
Tìm các dòng có ServerName
và ServerAlias
. Chúng nên được liệt kê 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í dụ này, bạn có thể thoát khỏi trình soạn thảo và chuyển sang bước tiếp theo. Nếu cấu hình virtual host hiện tại không khớp với ví dụ, hãy cập nhật nó cho phù hợp. Nếu bạn sử dụng nano, hãy thoát bằng cách nhấn CTRL+X
, sau đó nhấn Y
và ENTER
để xác nhận các thay đổi (nếu có).
Tiếp theo, chạy lệnh sau để kiểm tra các thay đổi:
sudo apache2ctl configtest
Bạn sẽ nhận được thông báo Syntax OK
. Nếu có lỗi, hãy mở lại file virtual host và kiểm tra các lỗi đánh máy hoặc ký tự thiếu. Khi cú pháp file cấu hình đã đúng, tải lại Apache để các thay đổi có hiệu lực:
sudo systemctl reload apache2
Với các thay đổi này, Certbot sẽ có thể tìm thấy khối VirtualHost chính xác và cập nhật nó.
Tiếp theo, bạn sẽ cập nhật cấu hình firewall để cho phép lưu lượng HTTPS.
Bước 3 – Cho phép HTTPS qua tường lửa
Nếu firewall UFW đã được kích hoạt theo hướng dẫn thiết lập ban đầu, bạn cần điều chỉnh cài đặt để cho phép lưu lượng HTTPS. Khi Apache được cài đặt, nó sẽ đăng ký một số profile ứng dụng với UFW. Bạn có thể sử dụng profile Apache Full để cho phép cả lưu lượng HTTP và HTTPS trên server của mình.
Để kiểm tra lưu lượng hiện tại được phép qua firewall, hãy chạy:
sudo ufw status
Nếu bạn đã làm theo một trong các hướng dẫn cài đặt Apache, output có thể như sau (chỉ lưu lượng HTTP trên cổng 80 được cho phép):
Output Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache (v6) ALLOW Anywhere (v6)
Để cho phép lưu lượng HTTPS, hãy cho phép profile “Apache Full”:
sudo ufw allow 'Apache Full'
Sau đó, xóa profile “Apache” thừa:
sudo ufw delete allow 'Apache'
Kiểm tra lại trạng thái firewall:
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)
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ẽ tự động cấu hình lại Apache và tải lại cấu hình khi cần thiết. Để sử dụng plugin này, chạy lệnh sau:
sudo certbot --apache
Lệnh này sẽ đưa ra một loạt các câu hỏi để cấu hình chứng chỉ SSL của bạn. Đầu tiên, nó sẽ yêu cầu bạn nhập một địa chỉ email hợp lệ. Email này sẽ được sử dụng để nhận thông báo gia hạn và thông báo an ninh:
Output Saving debug log to /var/log/letsencrypt/letsencrypt.log 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
để tiếp tục. Tiếp theo, bạn sẽ được hỏi xác nhận rằng bạn đồng ý với các điều khoản dịch vụ của Let’s Encrypt. Nhấn Y
và ENTER
để xác nhận:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: Y
Tiếp theo, bạn sẽ được hỏi liệu bạn có muốn chia sẻ email của mình với Electronic Frontier Foundation để nhận tin tức và thông tin khác không. Nếu không muốn, hãy nhập N. (Nếu có, nhập Y rồi nhấn ENTER.)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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
Sau đó, Certbot sẽ yêu cầu bạn chọn tên miền nào bạn muốn kích hoạt HTTPS. Các tên miền được liệt kê tự động lấy từ file Virtual Host của Apache, vì vậy hãy đảm bảo rằng chỉ thị ServerName và ServerAlias đã được cấu hình chính xác. Nếu bạn muốn kích hoạt HTTPS cho tất cả các tên miền liệt kê (khuyến nghị), chỉ cần để trống và nhấn ENTER. Nếu không, hãy chọn các tên miền cần kích hoạt bằng cách nhập số tương ứng, cách nhau bằng dấu phẩy và/hoặc khoảng trắng, 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):
Sau khi bước này hoàn tất, cấu hình Certbot đã xong và bạn sẽ nhận được các thông báo cuối cùng về chứng chỉ mới cùng vị trí lưu các file được tạo:
Output Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Key is saved at: /etc/letsencrypt/live/your_domain/privkey.pem This certificate expires on 2022-07-10. These files will be updated when the certificate renews. Certbot has set up a scheduled task to automatically renew this certificate in the background. Deploying certificate Successfully deployed certificate for your_domain to /etc/apache2/sites-available/your_domain-le-ssl.conf Successfully deployed certificate for www.your_domain.com to /etc/apache2/sites-available/your_domain-le-ssl.conf Congratulations! You have successfully enabled HTTPS on https:/your_domain and https://www.your_domain.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 giờ đã được cài đặt và nạp vào cấu hình của Apache. Hãy thử tải lại website sử dụng giao thức https:// và kiểm tra biểu tượng bảo mật trong trình duyệt (thông thường là hình ổ khóa trên thanh địa chỉ). Bạn có thể dùng công cụ SSL Labs Server Test để kiểm tra điểm số của chứng chỉ và lấy thông tin chi tiết từ góc nhìn của một dịch vụ bên ngoài.
Trong bước cuối cùng, bạn sẽ kiểm tra tính năng gia hạn tự động của Certbot, đảm bảo rằng chứng chỉ sẽ được tự động gia hạn trước khi hết hạn.
Bước 5 – Kiểm tra tính năng gia hạn tự động của Certbot
Chứng chỉ của Let’s Encrypt chỉ có hiệu lực 90 ngày. Điều này nhằm khuyến khích người dùng tự động gia hạn chứng chỉ, cũng như đảm bảo rằng các chứng chỉ bị lạm dụng hoặc các Key bị đánh cắp sẽ hết hạn nhanh chóng.
Gói certbot
bạn đã cài đặt tự động xử lý việc gia hạn thông qua một script gia hạn được đặt tại /etc/cron.d
, được quản lý bởi dịch vụ systemctl có tên certbot.timer
. Script này chạy hai lần một ngày và sẽ tự động gia hạn bất kỳ chứng chỉ nào còn trong vòng 30 ngày trước khi hết hạn.
Để kiểm tra trạng thái của dịch vụ này và đảm bảo nó đang hoạt động, hãy chạy:
sudo systemctl status certbot.timer
Để kiểm tra quá trình gia hạn, bạn có thể thực hiện một lần chạy thử (dry run) với Certbot:
sudo certbot renew --dry-run
Output Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/your_domain.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Account registered. Simulating renewal of an existing certificate for your_domain and www.your_domain.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations, all simulated renewals succeeded: /etc/letsencrypt/live/your_domain/fullchain.pem (success) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Nếu không có lỗi nào xuất hiện, mọi thứ đã sẵn sàng. Khi cần thiết, Certbot sẽ tự động gia hạn chứng chỉ và tải lại Apache để áp dụng các thay đổi. Nếu quy trình gia hạn tự động gặp sự cố, Let’s Encrypt sẽ gửi thông báo đến email bạn đã cung cấp, cảnh báo khi chứng chỉ sắp hết hạn.