Cấu hình SSL/TLS cho Apache và Nginx trên CentOS Stream 9: Chỉ 5 phút với Certbot

CentOS tutorial - IT technology blog
CentOS tutorial - IT technology blog

Đừng để trình duyệt “gạch tên” website của bạn

Hãy thử tưởng tượng khách hàng truy cập vào web và đập vào mắt là dòng chữ “Not Secure” đỏ chót. Theo thống kê, hơn 70% người dùng sẽ thoát ngay lập tức khi thấy cảnh báo này. Hiện nay, Google cũng ưu tiên các trang có HTTPS, chiếm hơn 95% lưu lượng truy cập trên Chrome. Vì vậy, SSL/TLS không còn là thứ “có thì tốt” mà đã trở thành tiêu chuẩn bắt buộc nếu bạn không muốn website bị tụt hạng SEO thê thảm.

Ngày trước, việc cài đặt chứng chỉ SSL trên CentOS 7 khá cực khổ. Bạn phải mua chứng chỉ từ nhà cung cấp (CA), rồi cấu hình thủ công các file .crt, .key rất dễ nhầm lẫn. Với CentOS Stream 9, mọi thứ đã thay đổi nhờ Let’s Encrypt và Certbot. Việc sở hữu một “ổ khóa xanh” hiện nay hoàn toàn miễn phí và chỉ mất khoảng 5 phút thao tác.

Ba khái niệm cốt lõi bạn cần nắm

Trước khi bắt tay vào gõ lệnh, hãy điểm qua các thành phần chúng ta sẽ sử dụng:

  • SSL/TLS: Giao thức mã hóa dữ liệu giữa trình duyệt và máy chủ. Thực tế, TLS là bản nâng cấp của SSL, nhưng chúng ta vẫn thường gọi chung là SSL cho quen thuộc.
  • Let’s Encrypt: Tổ chức cung cấp chứng chỉ số miễn phí, uy tín và được mọi trình duyệt lớn công nhận.
  • Certbot: Công cụ dòng lệnh (CLI) giúp bạn xin cấp mới và tự động gia hạn chứng chỉ. Nó giống như một người trợ lý tự động sửa file cấu hình Apache hay Nginx cho bạn.

Chuẩn bị môi trường trên CentOS Stream 9

Để quá trình cài đặt suôn sẻ, bạn cần chuẩn bị một VPS chạy CentOS Stream 9. Hãy chắc chắn domain đã được trỏ về IP của server và bạn có quyền root.

Đầu tiên, vì Certbot không nằm trong kho phần mềm chính thức, chúng ta cần kích hoạt Repo EPEL (Extra Packages for Enterprise Linux):

sudo dnf install epel-release -y
sudo dnf update -y

Một sai lầm kinh điển của các bạn mới là quên mở cổng tường lửa. Nếu cổng 80 và 443 bị chặn, Certbot sẽ không thể xác thực được tên miền của bạn.

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

Triển khai SSL cho Apache (httpd)

Nếu bạn đang chạy Apache, Certbot có một plugin chuyên dụng. Nó sẽ tự động quét các file Virtual Host và chèn cấu hình SSL vào đúng vị trí.

1. Cài đặt Certbot và Plugin Apache

sudo dnf install certbot python3-certbot-apache -y

2. Chạy lệnh cấp phát chứng chỉ

Lệnh dưới đây sẽ bắt đầu quá trình thiết lập tự động. Bạn chỉ cần nhập email để nhận thông báo khi chứng chỉ sắp hết hạn.

sudo certbot --apache

Trong quá trình chạy, Certbot hiển thị danh sách các domain bạn đã cấu hình. Hãy chọn số tương ứng hoặc nhấn Enter để chọn tất cả. Khi được hỏi về việc Redirect từ HTTP sang HTTPS, mình khuyên bạn nên chọn Yes (thường là số 2). Việc này giúp mọi truy cập đều được mã hóa tự động.

Triển khai SSL cho Nginx

Với Nginx, quy trình cũng đơn giản không kém. Plugin của Certbot trên CentOS Stream 9 hoạt động cực kỳ ổn định và không làm xáo trộn cấu hình hiện có.

1. Cài đặt Certbot và Plugin Nginx

sudo dnf install certbot python3-certbot-nginx -y

2. Chạy Certbot để lấy chứng chỉ

sudo certbot --nginx

Certbot sẽ tự tìm các dòng server_name trong file config của Nginx. Nếu nó không nhận diện được, bạn hãy kiểm tra lại file cấu hình trong /etc/nginx/conf.d/ xem đã khai báo domain chính xác chưa.

Mẹo nhỏ: Nếu bạn muốn tự tay cấu hình file config để tối ưu hiệu năng theo ý mình, hãy dùng lệnh certonly:

sudo certbot certonly --nginx

Cơ chế tự động gia hạn (Auto-renewal)

Chứng chỉ của Let’s Encrypt chỉ có hiệu lực trong 90 ngày. Đây là một điểm trừ nếu bạn hay quên. Website của khách hàng mình từng bị “sập” chỉ vì chứng chỉ hết hạn vào đúng mùng 1 Tết.

Rất may, khi cài Certbot qua DNF, hệ thống sẽ tự tạo một systemd timer. Timer này chạy kiểm tra 2 lần mỗi ngày để gia hạn các chứng chỉ sắp hết hạn (thường là trước 30 ngày). Bạn có thể kiểm tra trạng thái của nó bằng lệnh:

sudo systemctl list-timers | grep certbot

Để chắc chắn mọi thứ hoạt động hoàn hảo, hãy chạy thử lệnh mô phỏng gia hạn:

sudo certbot renew --dry-run

Nếu thấy dòng “Congratulations, all simulated renewals succeeded”, bạn có thể yên tâm kê gối ngủ ngon.

Lưu ý thực chiến để tránh lỗi

Dưới đây là vài kinh nghiệm mình đúc kết được sau nhiều lần triển khai:

  • Độ trễ DNS: Nếu vừa trỏ domain xong mà chạy Certbot ngay, khả năng cao sẽ báo lỗi. Hãy đợi khoảng 15-30 phút để DNS cập nhật hoàn toàn.
  • Chặn thư mục ẩn: Đảm bảo web server không chặn truy cập vào thư mục .well-known. Đây là nơi Certbot đặt file xác thực tạm thời.
  • Giới hạn tần suất: Let’s Encrypt giới hạn 50 chứng chỉ mỗi tên miền mỗi tuần. Đừng chạy lệnh xin cấp mới quá nhiều lần trong thời gian ngắn để tránh bị khóa IP tạm thời.

Lời kết

Cài đặt SSL trên CentOS Stream 9 giờ đây đã nhàn hơn rất nhiều. Chỉ với vài thao tác, website của bạn không chỉ bảo mật hơn mà còn chuyên nghiệp hơn trong mắt người dùng. Nếu bạn có ý định chuyển hệ thống từ CentOS 7 sang CentOS Stream 9, hãy nhớ backup thư mục /etc/letsencrypt/ để giữ lại các chứng chỉ cũ nhé. Chúc các bạn thực hiện thành công!

Share: