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.
- 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
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.comKhi 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
- Xác định mục tiêu thay đổi.
- Backup file cấu hình hoặc tạo snapshot nếu thay đổi rủi ro.
- Kiểm tra trạng thái hiện tại bằng lệnh phù hợp.
- Thay đổi trên lab/staging trước nếu có.
- Áp dụng production trong khung giờ phù hợp.
- Kiểm tra log, service, port, endpoint sau thay đổi.
- 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.
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
- Dựng lab nhỏ cho chủ đề này.
- Chạy toàn bộ lệnh kiểm tra.
- Tạo một lỗi nhỏ có kiểm soát và sửa lại.
- 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ể.
