Cài SSL Apache trên Ubuntu: cấp chứng chỉ và cấu hình HTTPS

Để 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)
				
			
Kiểm tra bản ghi DNS cổng 80 443 và cấu hình VirtualHost trước khi cài SSL Apache
Kiểm tra bản ghi DNS cổng 80 443 và cấu hình VirtualHost trước khi cài SSL Apache

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
				
			
				
					sudo certbot --apache -d example.com -d www.example.com
				
			
Ở lần chạy đầu, Certbot sẽ hỏi:
  1. Email: dùng để nhận thông báo quan trọng về chứng chỉ.
  2. Điều khoản dịch vụ: nhập Y (hoặc A tùy phiên bản) để đồng ý.
  3. Chia sẻ email với EFF: tùy chọn, có thể nhập N.
Sau đó Certbot xác thực HTTP-01, lưu chứng chỉ tại /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ỉ.
  • Include tệp options-ssl-apache.conf: nạp tham số TLS chuẩn của Certbot.
				
					sudo apache2ctl configtest
sudo systemctl reload apache2
				
			
Quy trình Certbot cấp chứng chỉ Let’s Encrypt và tạo tệp VirtualHost SSL cho Apache
Quy trình Certbot cấp chứng chỉ Let’s Encrypt và tạo tệp VirtualHost SSL cho Apache

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&gt;/dev/null | openssl x509 -noout -issuer -subject -dates
				
			
Cuối cùng, hãy mở website ở chế độ ẩn danh để xác nhận trình duyệt hiển thị kết nối bảo mật.

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ệnNguyên nhânCách xử lý
Timeout during connect hoặc Connection refusedCổng 80 bị UFW hoặc tường lửa ngoài chặn, hoặc apache2 đang dừngChạy sudo ufw status, mở Apache Full, kiểm tra sudo systemctl status apache2
DNS problem: NXDOMAIN hoặc sai IPBản ghi A/AAAA chưa đúng, hoặc DNS chưa phân giải xongKiể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 saiRà soát .htaccess trong DocumentRoot, cho phép đường dẫn .well-known/acme-challenge/
Let’s Encrypt giới hạn số lần xác thực thất bại mỗi giờ, nên sau khi sửa lỗi hãy thử bằng --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ạy sudo 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.conf rồi sudo systemctl reload apache2.

Lặp chuyển hướng hoặc Mixed Content

Lỗi ERR_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} off cũ có thể xung đột với quy tắc của Certbot. Hãy chỉ giữ một cơ chế chuyển hướng.
Xem Thêm  Hướng dẫn cài SSL cho Nginx trên Ubuntu bằng Let’s Encrypt và Certbot
Lỗi Mixed Content xảy ra khi mã nguồn vẫn gọi tài nguyên bằng liên kết 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.

Cách xử lý lỗi cài SSL Apache thường gặp và kiểm tra gia hạn tự động bằng Certbot

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.

Có Thể Bạn Thích
Bài viết mới
Zalozalo
Telegram
Lên đầu trang