Để cài SSL Apache trên Ubuntu, bạn cần cài Certbot và plugin Apache, sau đó sử dụng Certbot để cấp chứng chỉ Let’s Encrypt cho tên miền. Công cụ sẽ tự động xác minh tên miền, cài chứng chỉ SSL, cấu hình VirtualHost cổng 443 và kích hoạt HTTPS. Cuối cùng, kiểm tra kết nối và thiết lập gia hạn chứng chỉ tự động.
Điều kiện trước khi cài
Phần lớn lỗi khi chạy Certbot không nằm ở câu lệnh, mà do DNS chưa trỏ đúng IP hoặc VirtualHost cổng 80 chưa khai báo khớp tên miền.
Kiểm tra DNS và cổng 80/443
Certbot dùng xác thực HTTP-01: máy chủ Let’s Encrypt kết nối vào tên miền qua cổng 80 để kiểm tra tệp tạm. Vì vậy example.com và www.example.com phải có bản ghi A trỏ đúng IPv4 của VPS. Nếu chưa thiết lập, hãy làm theo hướng dẫn trỏ tên miền về VPS, rồi kiểm tra:
dig +short A example.com
dig +short A www.example.com
Nếu tên miền có bản ghi AAAA (IPv6) mà VPS chưa cấu hình IPv6 đầy đủ, hãy xóa bản ghi này để Let’s Encrypt không kiểm tra qua IPv6 rồi báo lỗi.
Tường lửa Ubuntu và tường lửa của nhà cung cấp (nếu có) phải mở cả cổng 80 và 443. Với UFW:
sudo ufw status
sudo ufw allow 'Apache Full'
Xác định VirtualHost và sao lưu
Bạn cần đăng nhập bằng root hoặc tài khoản có sudo. Plugin Apache của Certbot quét /etc/apache2/sites-enabled/ và dựa vào ServerName cùng ServerAlias để biết website nào cần gắn chứng chỉ. Vì vậy apache2 phải đang chạy và có sẵn VirtualHost cổng 80, ví dụ /etc/apache2/sites-available/example.com.conf:
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_html
Kiểm tra cú pháp và danh sách VirtualHost đang nạp:
sudo apache2ctl configtest
sudo apache2ctl -S
Khi thấy Syntax OK và example.com xuất hiện ở cổng 80, hãy sao lưu cấu hình:
sudo cp -a /etc/apache2 /etc/apache2.backup-$(date +%F)

Hướng dẫn Cách cài SSL Apache bằng Let’s Encrypt và Certbot
Bước 1: Cài Certbot và kiểm tra plugin Apache
Chỉ chọn một trong hai cách dưới đây để tránh tạo hai bộ hẹn giờ gia hạn trùng nhau.
Cài qua Snap (khuyến nghị, luôn có bản mới):
sudo apt remove certbot -y
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Hoặc cài qua APT (khi VPS đã gỡ snapd):
sudo apt update
sudo apt install certbot python3-certbot-apache -y
Kiểm tra bằng sudo certbot --version.
Bước 2: Cấp và cài chứng chỉ cho các tên miền cần sử dụng
Thay tên miền bằng tên miền thật của bạn:
sudo certbot --apache -d example.com -d www.example.com
- Email: dùng để nhận thông báo quan trọng về chứng chỉ.
- Điều khoản dịch vụ: nhập Y (hoặc A tùy phiên bản) để đồng ý.
- Chia sẻ email với EFF: tùy chọn, có thể nhập N.
/etc/letsencrypt/live/example.com/, bật các mô-đun cần thiết và nạp lại Apache. Thấy dòng Successfully deployed certificate là hoàn tất.Nếu Apache của bạn có cấu hình tùy chỉnh phức tạp và chỉ muốn lấy chứng chỉ, không để Certbot tự sửa cấu hình, hãy dùng <code>sudo certbot certonly –apache -d example.com -d www.example.com</code>.
Bước 3: Rà soát VirtualHost và cấu hình SSL cho Apache
Certbot giữ nguyên tệp cổng 80 và tạo thêm tệp mới có hậu tố -le-ssl.conf (ví dụ /etc/apache2/sites-available/example.com-le-ssl.conf) cho cổng 443, đồng thời bật module ssl và rewrite. Các chỉ thị chính trong tệp này:
<VirtualHost *:443>: tiếp nhận kết nối HTTPS trên cổng 443.SSLEngine on: bật mã hóa SSL/TLS cho khối này.SSLCertificateFile: trỏ tới chứng chỉ tên miền (fullchain), đã ghép sẵn chứng chỉ trung gian.SSLCertificateKeyFile: trỏ tới khóa bí mật tương ứng của chứng chỉ.Includetệpoptions-ssl-apache.conf: nạp tham số TLS chuẩn của Certbot.
sudo apache2ctl configtest
sudo systemctl reload apache2

Chuyển hướng HTTP sang HTTPS và kiểm tra website
Certbot bản hiện nay mặc định thêm RewriteRule vào VirtualHost cổng 80 để chuyển hướng 301 sang HTTPS. Nếu chưa có, hãy kiểm tra example.com.conf hoặc chạy lại:
sudo certbot --apache --redirect -d example.com -d www.example.com
Kiểm tra bằng curl:
curl -I example.com
curl -I https://example.com
Lệnh đầu phải trả HTTP/1.1 301 Moved Permanently kèm Location: https://example.com/. Lệnh sau phải trả 200 OK mà không có cảnh báo chứng chỉ. Để xem đơn vị cấp và ngày hết hạn:
echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null | openssl x509 -noout -issuer -subject -dates
Các lỗi thường gặp khi cài SSL Apache trên Ubuntu
Certbot không xác thực được tên miền
| Biểu hiện | Nguyên nhân | Cách xử lý |
| Timeout during connect hoặc Connection refused | Cổng 80 bị UFW hoặc tường lửa ngoài chặn, hoặc apache2 đang dừng | Chạy sudo ufw status, mở Apache Full, kiểm tra sudo systemctl status apache2 |
| DNS problem: NXDOMAIN hoặc sai IP | Bản ghi A/AAAA chưa đúng, hoặc DNS chưa phân giải xong | Kiểm tra dig +short A example.com, sửa DNS, xóa AAAA nếu không dùng IPv6 |
| Invalid response … 403 / 404 tại /.well-known/acme-challenge/ | .htaccess chặn thư mục ẩn hoặc chuyển hướng sai | Rà soát .htaccess trong DocumentRoot, cho phép đường dẫn .well-known/acme-challenge/ |
--dry-run thay vì chạy lệnh cấp thật nhiều lần.Apache không nạp HTTPS hoặc trả sai chứng chỉ
- Nhiều VirtualHost trong một tệp: Certbot hoạt động ổn định nhất khi mỗi website có một tệp .conf riêng. Gộp nhiều khối
<VirtualHost *:80>vào một tệp có thể khiến Certbot không tách được tệp-le-ssl.conf. - Thiếu hoặc sai ServerName / ServerAlias: Khi tên miền không khớp khối nào, Apache đưa yêu cầu về VirtualHost đầu tiên (thường là
000-default.conf) và trả chứng chỉ sai. Hãy chạysudo apache2ctl -Sđể xem thứ tự ưu tiên. - Chưa bật mod_ssl khi dùng certonly: Hãy chạy
sudo a2enmod ssl,sudo a2ensite example.com-le-ssl.confrồisudo systemctl reload apache2.
Lặp chuyển hướng hoặc Mixed Content
LỗiERR_TOO_MANY_REDIRECTS thường do hai nguyên nhân:- Cloudflare ở chế độ Flexible: Cloudflare gửi yêu cầu tới VPS qua cổng 80, trong khi Apache lại ép sang HTTPS nên tạo vòng lặp. Khi VPS đã có chứng chỉ hợp lệ, hãy đổi SSL/TLS trên Cloudflare sang Full (strict).
- Xung đột chuyển hướng trong .htaccess: Đoạn
RewriteCond %{HTTPS} offcũ có thể xung đột với quy tắc của Certbot. Hãy chỉ giữ một cơ chế chuyển hướng.
http:// cố định. Trên WordPress, hãy vào Settings -> General đổi cả hai ô địa chỉ sang https://, cập nhật đường dẫn ảnh cũ trong database và xóa cache.Kiểm tra gia hạn tự động
Chứng chỉ Let’s Encrypt có hiệu lực 90 ngày. Certbot tự thiết lập bộ hẹn giờ chạy hai lần mỗi ngày và làm mới các chứng chỉ còn từ 30 ngày trở xuống. Tùy cách cài ở Bước 1, hãy kiểm tra một trong hai lệnh:
sudo systemctl status snap.certbot.renew.timer
sudo systemctl status certbot.timer
Thấy Active: active (waiting) là timer đã bật. Sau đó chạy thử gia hạn mô phỏng:
sudo certbot renew --dry-run
Thông báo Congratulations, all simulated renewals succeeded nghĩa là chu trình gia hạn đã ổn. Nếu lệnh báo lỗi, hoặc bạn cần cấu hình deploy-hook khi chạy nhiều dịch vụ, hãy xem hướng dẫn tự động gia hạn Let’s Encrypt.

Kết luận
Quy trình cài SSL Apache trên Ubuntu sẽ trơn tru khi bạn chuẩn bị đúng DNS, mở Apache Full trên tường lửa và tách từng VirtualHost với đầy đủ ServerName, ServerAlias. Sau khi bật HTTPS, hãy kiểm tra bằng apache2ctl -S, đối chiếu chuyển hướng 301 và chạy certbot renew --dry-run để website giữ kết nối bảo mật ổn định.
Nếu cần VPS giá rẻ toàn quyền root để triển khai Apache, LAMP stack hoặc ứng dụng web trên Ubuntu, bạn có thể tham khảo các gói tại THUEVPSGIARE.COM.

Tôi là Trần Thành Hồng Quân, nhân viên kỹ thuật tại THUEVPSGIARE.COM. Với hơn 5 năm kinh nghiệm trong lĩnh vực VPS, Hosting và quản trị hệ thống, tôi đã trực tiếp triển khai, vận hành và xử lý nhiều vấn đề kỹ thuật liên quan đến máy chủ và hạ tầng hosting. Thông qua các bài viết kỹ thuật trên THUEVPSGIARE.COM, tôi mong muốn chia sẻ những kiến thức thực tế, dễ hiểu và có thể áp dụng, giúp người dùng sử dụng VPS, Hosting và Server hiệu quả, ổn định và an toàn hơn.


