Trang chủHướng dẫnCách bảo mật Apache với Let’s Encrypt trên Ubuntu
Chuyên gia

Cách bảo mật Apache với Let’s Encrypt trên Ubuntu

CyStack blog 8 phút để đọc
CyStack blog25/08/2025
Locker Avatar

Chris Pham

Technical Writer

Locker logo social
Reading Time: 8 minutes

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

bảo mật Apache với Let's Encrypt trên Ubuntu

Trong hướng dẫn này, chúng ta sẽ bảo mật Apache với Let’s Encrypt trên Ubuntu, đồng thời thiết lập cơ chế tự động gia hạn chứng chỉ.

Chúng ta sẽ cấu hình chứng chỉ bảo mật cho website bằng cách sử dụng một tệp virtual host riêng, thay vì chỉnh sửa trực tiếp tệp cấu hình mặc định của Apache. Việc tạo một virtual host riêng cho từng tên miền được lưu trữ trên máy chủ là phương pháp được khuyến nghị, nhằm hạn chế lỗi cấu hình phổ biến và giữ nguyên tệp cấu hình mặc định như một phương án dự phòng.

Cách Bảo Mật Apache bằng Let’s Encrypt trên Ubuntu

  • Cài đặt Certbot
  • Kiểm tra Cấu Hình Virtual Host của Apache
  • Mở Kết Nối HTTPS qua Tường Lửa
  • Lấy Chứng Chỉ SSL
  • Xác Minh Tính Năng Tự Động Gia Hạn của Certbot

Yêu cầu trước khi bắt đầu

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

  • Một máy chủ Ubuntu đã được thiết lập với người dùng không phải root, có quyền sudo và đã kích hoạt tường lửa. Bạn có thể thiết lập môi trường này bằng cách làm theo hướng dẫn khởi tạo máy chủ Ubuntu.
  • Một tên miền đã đăng ký đầy đủ. Trong toàn bộ hướng dẫn này, chúng tôi sẽ sử dụng your_domain làm ví dụ. Bạn có thể mua tên miền từ Namecheap, đăng ký miễn phí tại Freenom hoặc sử dụng bất kỳ nhà cung cấp tên miền nào bạn muốn.
  • Hai bản ghi DNS sau được thiết lập trỏ về máy chủ của bạn. Bạn có thể tham khảo phần giới thiệu về DNS trên DigitalOcean để tìm hiểu thêm:
    • Một bản ghi A trỏ từ your_domain đến địa chỉ IP công cộng của máy chủ
    • Một bản ghi A trỏ từ www.your_domain đến địa chỉ IP công cộng của máy chủ
  • Apache đã được cài đặt theo hướng dẫn Cách Cài Đặt Apache trên Ubuntu. Chúng ta cần kiểm tra và đảm bảo rằng đã có tệp virtual host dành riêng cho tên miền của mình. Trong hướng dẫn này, chúng ta sẽ sử dụng tệp /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, chúng ta cần cài đặt phần mềm Certbot trên máy chủ thông qua các kho phần mềm mặc định của Ubuntu.

Trước tiên, bạn hãy cập nhật chỉ mục gói cục bộ:

sudo apt update

Bạn cần cài đặt hai gói: certbotpython3-certbot-apache. Gói thứ hai là một 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 cho máy chủ web chỉ với một lệnh duy nhất:

sudo apt install certbot python3-certbot-apache

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

Certbot hiện đã được cài đặt trên máy chủ. Ở bước tiếp theo, bạn cần kiểm tra cấu hình của Apache để đảm bảo virtual host được thiết lập chính xác. Điều này giúp script Certbot có thể phát hiện các 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 Virtual Host của Apache

Để tự động lấy và cấu hình chứng chỉ SSL cho máy chủ web, Certbot cần tìm đúng virtual host trong các tệp cấu hình Apache. Tên miền của máy chủ sẽ được lấy từ các chỉ thị ServerNameServerAlias được khai báo trong khối VirtualHost.

Nếu bạn đã thực hiện bước thiết lập virtual host trong hướng dẫn cài đặt Apache, cần có một khối VirtualHost được cấu hình cho tên miền tại đường dẫn /etc/apache2/sites-available/your_domain.conf, trong đó đã khai báo ServerNameServerAlias một cách hợp lý.

Để xác nhận điều này, bạn hãy mở tệp virtual host tương ứng bằng nano hoặc trình soạn thảo văn bản mà bạn ưa thích:

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

Tìm các dòng ServerNameServerAlias hiện có. Các dòng này nên được khai báo như sau:

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

Nếu bạn đã cấu hình ServerNameServerAlias như trên, 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 hiện tại của bạn không giống với ví dụ, bạn hãy cập nhật lại cho phù hợp. Nếu đang sử dụng nano, bạn có thể thoát bằng cách nhấn CTRL+X, sau đó nhấn YENTER để lưu thay đổi (nếu có). Tiếp theo, chạy lệnh sau để xác minh cấu hình:

sudo apache2ctl configtest

Bạn nên nhận được thông báo Syntax OK. Nếu gặp lỗi, hãy mở lại tệp virtual host và kiểm tra xem có lỗi chính tả hoặc ký tự bị thiếu không. Khi cú pháp trong tệp cấu hình đã chính xác, hãy tải lại Apache để các thay đổi có hiệu lực:

sudo systemctl reload apache2

Với các thay đổi trên, Certbot sẽ có thể tìm đúng khối VirtualHost để cập nhật.

Tiếp theo, cần cập nhật cấu hình tường lửa để cho phép lưu lượng HTTPS.

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

Certbot cung cấp nhiều phương thức khác nhau để lấy chứng chỉ SSL thông qua các plugin. Plugin Apache sẽ đảm nhiệm việc 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, bạn hãy chạy lệnh sau:

sudo certbot --apache

Script này sẽ yêu cầu bạn trả lời một loạt câu hỏi để cấu hình chứng chỉ SSL. Trước tiên, cần được yêu cầu nhập một địa chỉ email hợp lệ. Địa chỉ này sẽ được sử dụng để gửi thông báo gia hạn và cảnh báo bảo mật:

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 địa chỉ email hợp lệ, nhấn ENTER để đi đến bước tiếp theo. Tiếp theo, cần yêu cầu xác nhận bạn đã đồng ý với các điều khoản dịch vụ của Let’s Encrypt. Xác nhận bằng cách nhấn Y, sau đó 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>
(Y)es/(N)o: Y

Tiếp theo, bạn có muốn chia sẻ địa chỉ email của mình với tổ chức Electronic Frontier Foundation (EFF) để nhận tin tức và các thông tin khác không? Nếu không muốn đăng ký nhận nội dung từ EFF, bạ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 kế tiếp, cần chọn những tên miền mà bạn muốn kích hoạt HTTPS. Các tên miền hiển thị ở đây được tự động lấy từ cấu hình virtual host của Apache, do đó bạn cần đảm bảo đã thiết lập đúng ServerNameServerAlias, đây là bước rất quan trọng. Nếu bạn muốn bật HTTPS cho tất cả các tên miền được liệt kê (được khuyến nghị), hãy để trống và nhấn ENTER để tiếp tục. Ngược lại, hãy nhập số tương ứng với tên miền mà bạn muốn kích hoạt, phân cách bằng dấu phẩy hoặc khoảng trắng, 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):

Sau bước này, quá trình cấu hình của Certbot sẽ hoàn tất và cần thấy thông báo cuối cùng về chứng chỉ mới được cấp cùng với đường dẫn lưu các tệp cấu hình:

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

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

Ở bước tiếp theo và cũng là bước cuối cùng, cần kiểm tra tính năng tự động gia hạn 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: Xác minh tính năng tự động gia hạn của Certbot

Các chứng chỉ của Let’s Encrypt chỉ có hiệu lực trong vòng 90 ngày. Chính sách này nhằm khuyến khích người dùng tự động hóa quá trình gia hạn chứng chỉ, đồng thời đảm bảo rằng các chứng chỉ bị lạm dụng hoặc khóa riêng bị đánh cắp sẽ hết hạn trong thời gian ngắn.

Gói certbot mà bạn đã cài đặt sẽ tự động xử lý việc gia hạn bằng cách cài đặt một script gia hạn tại /etc/cron.d, do một dịch vụ systemctl có tên là certbot.timer quản lý. Script này sẽ chạy hai lần mỗi ngày và tự động gia hạn bất kỳ chứng chỉ nào còn dưới 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 tình trạng hoạt động, bạn hãy chạy lệnh sau:

sudo systemctl status certbot.timer

Kết quả nhận được sẽ tương tự như sau:

Output

● certbot.timer - Run certbot twice daily
     Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset:>)
     Active: active (waiting) since Mon 2022-04-11 20:52:46 UTC; 4min 3s ago
    Trigger: Tue 2022-04-12 00:56:55 UTC; 4h 0min left
   Triggers: ● certbot.service

Apr 11 20:52:46 jammy-encrypt 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ử bằng lệnh sau:

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 xảy ra, quá trình kiểm tra đã hoàn tất. Khi cần thiết, Certbot sẽ tự động gia hạn chứng chỉ của bạn và tải lại Apache để áp dụng thay đổi. Trong trường hợp quá trình gia hạn tự động bị lỗi, Let’s Encrypt sẽ gửi email cảnh báo đến địa chỉ bạn đã cung cấp khi đăng ký, thông báo về việc chứng chỉ sắp hết hạn.

Kết luận

Trong hướng dẫn này, bạn đã cài đặt công cụ Certbot từ Let’s Encrypt, cấu hình và cài đặt chứng chỉ SSL cho tên miền của mình, đồng thời xác nhận rằng dịch vụ tự động gia hạn của Certbot đang hoạt động trong systemctl.

Nếu bạn cần thêm thông tin về cách sử dụng Certbot, hãy tham khảo tài liệu chính thức của họ, đây sẽ là một điểm khởi đầu tốt.

0 Bình luận

Đăng nhập để thảo luận

Chuyên mục Hướng dẫn

Tổng hợp các bài viết hướng dẫn, nghiên cứu và phân tích chi tiết về kỹ thuật, các xu hướng công nghệ mới nhất dành cho lập trình viên.

Đăng ký nhận bản tin của chúng tôi

Hãy trở thành người nhận được các nội dung hữu ích của CyStack sớm nhất

Xem chính sách của chúng tôi Chính sách bảo mật.

Đăng ký nhận Newsletter

Nhận các nội dung hữu ích mới nhất