Giới thiệu
Let’s Encrypt là một Certificate Authority (CA) miễn phí, tự động, cấp chứng chỉ TLS để xác thực máy chủ và mã hóa kết nối giữa trình duyệt với máy chủ web. Certbot là ứng dụng khách ACME dùng để yêu cầu, cài đặt và tự động gia hạn chứng chỉ. Với plugin Apache, Certbot có thể tìm VirtualHost phù hợp, bổ sung cấu hình TLS và tải lại Apache sau khi cài đặt (theo Tài liệu Ubuntu Server).
Trong hướng dẫn này, bạn sẽ dùng Certbot để cấp chứng chỉ cho Apache trên Ubuntu 22.04 hoặc Ubuntu 24.04, bật HTTPS và kiểm tra cơ chế tự động gia hạn.
Bài viết sử dụng một tệp VirtualHost riêng cho website thay vì chỉnh sửa cấu hình mặc định của Apache. Cách này giúp mỗi domain có cấu hình độc lập và dễ quản lý khi máy chủ phục vụ nhiều website.
Điều kiện cần thiết
Để thực hiện hướng dẫn, bạn cần:
- Một máy chủ Ubuntu 22.04 hoặc Ubuntu 24.04 có người dùng không phải root, quyền quản trị thông qua
sudovà firewall đã được cấu hình. Bạn có thể tham khảo hướng dẫn thiết lập máy chủ Ubuntu. - Một domain đã đăng ký. Trong bài viết, domain mẫu là
your_domain. - DNS của domain trỏ về địa chỉ IP công khai của máy chủ. Nếu muốn cấp một chứng chỉ cho cả hai tên, hãy tạo:
- Bản ghi A hoặc bản ghi AAAA cho
your_domain, tùy loại địa chỉ máy chủ. - Bản ghi A hoặc bản ghi AAAA cho
www.your_domain, nếu website sử dụng tên này.
- Bản ghi A hoặc bản ghi AAAA cho
- Apache đã được cài đặt và có VirtualHost cho domain, chẳng hạn
/etc/apache2/sites-available/your_domain.conf. Xem thêm cách cài Apache trên Ubuntu. - Cổng TCP
80phải truy cập được từ Internet khi dùng phương thức xác minh HTTP-01; cổng TCP443cần được mở để người dùng truy cập HTTPS (theo Tài liệu Ubuntu Server).
Bước 1 — Cài đặt Certbot
Tài liệu Ubuntu hiện hướng dẫn cài Certbot từ Snap Store. Cách này giúp Certbot được cập nhật độc lập với chu kỳ phát hành gói APT của Ubuntu.
Nếu Snap chưa được cài trên máy chủ, hãy cài snapd:
sudo apt update
sudo apt install snapd
Sau đó cài Certbot:
sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot
Trong trường hợp lệnh certbot chưa được tìm thấy sau khi cài đặt, tạo liên kết đến tệp thực thi:
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Nếu máy chủ đã có Certbot từ APT, hãy kiểm tra gói hiện có trước khi chuyển sang Snap. Không nên cài hai bản Certbot cùng lúc nếu bạn không chắc chúng đang dùng chung cơ chế gia hạn. Có thể xem các gói liên quan bằng:
apt list --installed 2>/dev/null | grep -E 'certbot|python3-certbot'
Kiểm tra phiên bản đã cài:
certbot --version
Bước 2 — Kiểm tra cấu hình VirtualHost của Apache
Để tự động cấp và cài chứng chỉ, Certbot cần tìm đúng VirtualHost trong cấu hình Apache. Tên domain được lấy từ các chỉ thị ServerName và ServerAlias. VirtualHost đang sử dụng nên được bật trong thư mục /etc/apache2/sites-enabled/.
Mở tệp VirtualHost của domain:
sudo nano /etc/apache2/sites-available/your_domain.conf
Đảm bảo tệp có các dòng tương tự:
<VirtualHost *:80>
ServerName your_domain
ServerAlias www.your_domain
DocumentRoot /var/www/your_domain
</VirtualHost>
Nếu website chưa được bật, hãy bật VirtualHost rồi kiểm tra cú pháp:
sudo a2ensite your_domain.conf
sudo apache2ctl configtest
Kết quả mong đợi là Syntax OK. Nếu không có lỗi, tải lại Apache và xem danh sách VirtualHost:
sudo systemctl reload apache2
sudo apache2ctl -S
Bước 3 — Mở HTTP và HTTPS trên firewall
Nếu sử dụng UFW, hãy cho phép SSH, HTTP và HTTPS. Không nên đóng cổng 80 trước khi hoàn tất việc cấp chứng chỉ, vì phương thức HTTP-01 xác minh quyền kiểm soát domain bằng cách gửi yêu cầu HTTP đến máy chủ qua cổng này (theo Tài liệu Ubuntu Server).
sudo ufw status
sudo ufw allow OpenSSH
sudo ufw allow 'Apache Full'
Nếu profile Apache Full không tồn tại, xem danh sách profile hoặc mở trực tiếp hai cổng web:
sudo ufw app list
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw status
Nếu trước đó đã cho phép profile chỉ dành cho HTTP, bạn có thể xóa quy tắc cũ sau khi xác nhận quy tắc HTTPS hoạt động:
sudo ufw delete allow 'Apache'
Ngoài UFW, hãy kiểm tra firewall của nhà cung cấp VPS, security group, router hoặc load balancer nếu có. Các lớp mạng này cũng phải cho phép lưu lượng đến cổng 80 và 443.
Bước 4 — Cấp và cài chứng chỉ TLS
Chạy Certbot với plugin Apache và chỉ định đầy đủ các domain cần bảo vệ:
sudo certbot --apache -d your_domain -d www.your_domain
Certbot sẽ yêu cầu địa chỉ email để gửi cảnh báo, yêu cầu bạn chấp thuận điều khoản dịch vụ và hỏi có muốn chuyển hướng HTTP sang HTTPS hay không. Với website công khai, chuyển hướng toàn bộ HTTP sang HTTPS thường là lựa chọn phù hợp, miễn là ứng dụng không cần duy trì HTTP riêng.
Mỗi tùy chọn -d thêm một tên miền vào chứng chỉ dưới dạng Subject Alternative Name (SAN). Vì vậy, hãy liệt kê tất cả domain cần sử dụng ngay trong cùng một lệnh.
Sau khi hoàn tất, các tệp chứng chỉ thường nằm tại:
/etc/letsencrypt/live/your_domain/fullchain.pem
/etc/letsencrypt/live/your_domain/privkey.pem
fullchain.pem chứa chứng chỉ máy chủ cùng chuỗi chứng chỉ trung gian; privkey.pem là khóa riêng. Không chia sẻ khóa riêng hoặc cấp quyền đọc khóa này cho người dùng không cần thiết. Certbot thường sử dụng các đường dẫn trong thư mục live để cấu hình dịch vụ.
Certbot sẽ tạo hoặc cập nhật cấu hình HTTPS cho Apache, sau đó tải lại dịch vụ. Mở cả https://your_domain và https://www.your_domain để xác nhận đúng domain, chứng chỉ và chuyển hướng.
Bạn có thể dùng SSL Labs Server Test để kiểm tra chứng chỉ và cấu hình TLS từ một dịch vụ bên ngoài.
Bước 5 — Kiểm tra tự động gia hạn của Certbot
Chứng chỉ Let’s Encrypt theo hồ sơ mặc định hiện vẫn có thời hạn 90 ngày. Let’s Encrypt đang triển khai các hồ sơ có thời hạn ngắn hơn: hồ sơ tlsserver có thể cấp chứng chỉ 45 ngày từ ngày 13 tháng 5 năm 2026, còn hồ sơ mặc định classic dự kiến chuyển sang 64 ngày vào ngày 10 tháng 2 năm 2027 và 45 ngày vào ngày 16 tháng 2 năm 2028. Phần lớn người dùng tự động gia hạn không cần thay đổi ngay, nhưng cần bảo đảm lịch gia hạn không dựa trên khoảng thời gian cố định quá dài (theo Let’s Encrypt).
Bản Certbot cài từ Snap thiết lập systemd timer để thử gia hạn hai lần mỗi ngày. Kiểm tra timer bằng lệnh:
sudo systemctl status snap.certbot.renew.timer
Chạy thử quy trình gia hạn mà không thay đổi chứng chỉ đang sử dụng:
sudo certbot renew --dry-run
Nếu kết quả cho biết lần gia hạn mô phỏng thành công, cấu hình cơ bản đã sẵn sàng. Khi chứng chỉ gần hết hạn, Certbot sẽ tự động gia hạn; với chứng chỉ được cài qua plugin Apache, Apache được tải lại sau khi gia hạn thành công (theo Tài liệu Ubuntu Server).
Nếu website dùng reverse proxy, load balancer hoặc firewall mạng riêng, hãy kiểm tra khả năng truy cập từ Internet và xem nhật ký khi lệnh --dry-run thất bại. Với domain không thể phục vụ HTTP-01 qua cổng 80 hoặc khi cần chứng chỉ wildcard như *.example.com, có thể dùng phương thức DNS-01 và plugin DNS tương ứng.
Kết luận
Bạn đã cài Certbot, kiểm tra VirtualHost Apache, mở các cổng web cần thiết, cấp chứng chỉ TLS Let’s Encrypt và xác minh cơ chế tự động gia hạn. Sau khi bật HTTPS, hãy kiểm tra cả domain chính và domain www, theo dõi nhật ký gia hạn và xử lý sớm mọi cảnh báo để tránh chứng chỉ hết hạn.

