Bài 17: SSL/TLS và HTTPS với Let’s Encrypt

Bài 17: SSL/TLS và HTTPS với Let’s Encrypt

Bài này chi tiết hóa SSL/TLS và HTTPS theo hướng dễ hiểu, có lệnh thực hành, tình huống production, checklist và bài tập.

Sau bài này anh sẽ biết:

  • Hiểu SSL/TLS và HTTPS dùng để giải quyết vấn đề gì trong production.
  • Nắm các lệnh/cấu hình quan trọng.
  • Biết quy trình thực hành từng bước trong lab.
  • Có checklist kiểm tra trước khi áp dụng production.

Chốt ý nhanh

Chủ đề Điểm cần nhớ
SSL/TLS Giúp mã hóa kết nối giữa client và server, bảo vệ dữ liệu khi truyền qua mạng.
Let’s Encrypt Cho phép cấp chứng chỉ miễn phí, tự động gia hạn nếu triển khai đúng.
Phản xạ đúng Không chỉ làm cho có HTTPS, mà phải kiểm tra redirect, chain cert và gia hạn.

1. Bối cảnh thực tế

Ssl/tls và https không phải kiến thức lý thuyết riêng lẻ. Trong vận hành production, nó giúp giảm downtime, giảm rủi ro bảo mật và giúp hệ thống dễ khôi phục hơn khi có sự cố.

2. Các khái niệm cần nắm

  • Trạng thái hiện tại: trước khi sửa phải biết hệ thống đang chạy thế nào.
  • Thay đổi nhỏ: thay đổi từng bước để dễ rollback.
  • Log/metric: dùng để xác nhận thay đổi đúng hay sai.
  • Rollback: luôn có đường quay lại khi cấu hình lỗi.

3. Lab thực hành

Mục tiêu lab: chạy các lệnh kiểm tra, tạo thay đổi nhỏ và xác nhận kết quả.
dig +short example.com
ss -tulpn | grep -E ':80|:443'
sudo nginx -t
sudo certbot --nginx -d example.com -d www.example.com
sudo certbot renew --dry-run
curl -I https://example.com
openssl s_client -connect example.com:443 -servername example.com 

Khi thực hành, anh nên ghi lại output trước và sau. Đây là thói quen rất quan trọng của SysAdmin/DevOps.

4. Tình huống thực tế

Website đã chạy HTTP. Anh cần trỏ DNS đúng IP, mở port 80/443, kiểm tra Nginx, cấp cert bằng Let’s Encrypt, test HTTPS và test tự động gia hạn.

5. Quy trình triển khai an toàn

  1. Xác định mục tiêu thay đổi.
  2. Backup file cấu hình hoặc tạo snapshot nếu thay đổi rủi ro.
  3. Kiểm tra trạng thái hiện tại bằng lệnh phù hợp.
  4. Thay đổi trên lab/staging trước nếu có.
  5. Áp dụng production trong khung giờ phù hợp.
  6. Kiểm tra log, service, port, endpoint sau thay đổi.
  7. Ghi lại thay đổi và phương án rollback.

6. Lỗi thường gặp

  • Làm trực tiếp production mà không backup.
  • Sửa nhiều thứ cùng lúc nên không biết lỗi do đâu.
  • Không đọc log sau khi reload/restart service.
  • Không ghi lại command đã chạy.
Lưu ý production: Nếu thay đổi có thể làm mất kết nối, dừng service hoặc ảnh hưởng dữ liệu, hãy chuẩn bị rollback trước khi chạy lệnh.

7. Checklist

  • Đã kiểm tra trạng thái hiện tại.
  • Đã backup cấu hình/dữ liệu liên quan.
  • Đã test syntax/config nếu có.
  • Đã xác nhận service hoạt động sau thay đổi.
  • Đã ghi lại thay đổi vào tài liệu vận hành.

8. Bài tập

  1. Dựng lab nhỏ cho chủ đề này.
  2. Chạy toàn bộ lệnh kiểm tra.
  3. Tạo một lỗi nhỏ có kiểm soát và sửa lại.
  4. Viết checklist 5 bước dùng cho production.

Phần thực hành mở rộng: triển khai HTTPS như một yêu cầu production tối thiểu

Trong môi trường thật, HTTPS không còn là phần cộng thêm. Nó là baseline. Người học cần biết không chỉ cách chạy certbot, mà còn cách kiểm tra chứng chỉ, redirect và xử lý khi cert sắp hết hạn.

Lab 1: Kiểm tra site hiện tại trước khi cấp chứng chỉ

dig +short example.com
curl -I http://example.com
ss -tulpn | grep -E ':80|:443'

Trước khi xin cert, domain phải trỏ đúng về máy và web server phải phục vụ được trên cổng cần thiết.

Lab 2: Cấp chứng chỉ với certbot

sudo apt update
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d example.com -d www.example.com

Hoặc với Apache:

sudo apt install certbot python3-certbot-apache -y
sudo certbot --apache -d example.com -d www.example.com

Lab 3: Kiểm tra redirect HTTP sang HTTPS

curl -I http://example.com
curl -I https://example.com
curl -vk https://example.com

Hãy đọc kỹ status code, header Location và xác nhận client thật sự đi qua kết nối TLS.

Lab 4: Kiểm tra hạn chứng chỉ và auto-renew

sudo certbot renew --dry-run
systemctl list-timers | grep certbot
openssl s_client -connect example.com:443 -servername example.com 

Nếu chỉ cài xong rồi bỏ đó, vài tháng sau chứng chỉ hết hạn sẽ biến thành sự cố production rất khó chịu.

Lab 5: Đọc lỗi TLS thường gặp

Tự mô phỏng và phân tích các lỗi sau:

  • domain trỏ sai IP nên challenge fail
  • port 80/443 bị firewall chặn
  • Nginx chưa load virtual host đúng domain
  • cert có nhưng chưa gắn đúng file vào server block

Tình huống thực tế

Một website chạy được trên IP nhưng domain chưa trỏ đúng, hoặc Nginx chỉ có một block mặc định, là đủ để certbot cấp lỗi hoặc cấp sai host. Trong thực chiến, phải kiểm từng lớp: DNS, firewall, web server, rồi mới nói đến certificate.

Lỗi phổ biến

  • Chỉ kiểm tra bằng trình duyệt mà không đọc response bằng curl/openssl.
  • Quên test auto-renew.
  • Bật HTTPS nhưng không redirect HTTP nhất quán.
  • Dùng cert hết hạn vì tưởng cron/timer tự gia hạn đã chạy.

Kết bài

Sau bài này, anh nên xem HTTPS như một tiêu chuẩn vận hành tối thiểu chứ không phải tùy chọn. Khi hiểu cả cấp phát, kiểm tra và gia hạn cert, anh đã khóa chặt thêm một lớp rất quan trọng trước khi bước vào Docker — nơi cách đóng gói và chạy dịch vụ sẽ thay đổi đáng kể.

Tác giả: Mạnh Hoàng

Tôi là Hoàng Mạnh, người sáng lập blog SysadminSkills.com. Tôi viết về quản trị hệ thống, bảo mật máy chủ, DevOps và cách ứng dụng AI để tự động hóa công việc IT. Blog này là nơi tôi chia sẻ những gì đã học được từ thực tế – đơn giản, ngắn gọn và áp dụng được ngay.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *