Giới thiệu
Bảo mật lớp truyền tải (TLS) là nền tảng của lưu lượng web được mã hóa. Đối với các quản lý DevOps điều hành các trang web có lưu lượng truy cập cao, một cấu hình TLS không chính xác có thể rò rỉ dữ liệu, giảm hiệu suất hoặc thậm chí làm lộ máy chủ của bạn trước các cuộc tấn công hạ cấp. Danh sách kiểm tra này sẽ hướng dẫn bạn qua các bước tăng cường bảo mật hiệu quả nhất cho Nginx trên Linux, tập trung vào các bộ mã hóa hiện đại, Bảo mật Đường truyền Hoàn hảo (PFS) và độ trễ tối thiểu.
1. Sử dụng Phiên bản TLS Gần đây
Các phiên bản giao thức cũ (SSLv3, TLS 1.0/1.1) đầy rẫy các lỗ hổng đã biết. Trong tệp nginx.conf, chỉ cho phép TLS 1.2 và TLS 1.3:
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
Cả hai phiên bản này đều được hầu hết các trình duyệt hỗ trợ ngày nay, và TLS 1.3 mang lại sự giảm độ trễ bắt tay từ 30 đến 40%.
2. Chọn Bộ Mã Hóa Mạnh
Một danh sách mã hóa được chọn lọc kỹ lưỡng ngăn chặn việc quay lại các thuật toán yếu. Bộ mã sau đây hoạt động cho hầu hết các trình duyệt trong khi sử dụng CPU ở mức thấp:
ssl_ciphers \
"TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256" \
"ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384" \
"ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305";
- Tại sao lại chọn những bộ mã này?
- Tất cả đều là AEAD (Mã hóa xác thực với Dữ liệu liên quan) – không cần MAC riêng biệt.
- Chúng sử dụng Elliptic Curve Diffie-Hellman (ECDHE) cho PFS.
- Danh sách ưu tiên các khóa 256-bit nhưng sẽ quay lại 128-bit cho phần cứng cũ hơn.
3. Bảo Đảm Bảo Mật Đường Truyền Hoàn Hảo
PFS đảm bảo rằng ngay cả khi khóa riêng của bạn bị xâm phạm, các phiên trước đó vẫn được mã hóa. Các bộ ECDHE trên đây đã cung cấp PFS, nhưng bạn có thể kiểm tra lại bằng:
openssl s_client -connect example.com:443 -cipher "ECDHE" -tls1_2
Nếu đầu ra hiển thị Cipher : ECDHE-RSA-AES256-GCM-SHA384, bạn đã sẵn sàng.
4. Cải Thiện Chuỗi Chứng Chỉ
- Sử dụng CA uy tín – tránh các chứng chỉ tự ký trong môi trường sản xuất.
- Bao gồm chứng chỉ trung gian – một chuỗi đầy đủ tránh các vòng đi vòng lại không cần thiết.
- Kích hoạt OCSP stapling để cho phép trình duyệt xác minh trạng thái thu hồi mà không cần yêu cầu riêng:
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
5. Tối Ưu Hóa Khôi Phục Phiên TLS
Thẻ phiên giảm tải trong quá trình bắt tay. Bật chúng lên, nhưng xoay vòng khóa thẻ hàng ngày để giới hạn mức độ tiếp xúc:
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets on;
ssl_ticket_key /etc/nginx/ticket.key;
Tạo khóa thẻ mới bằng:
openssl rand 48 > /etc/nginx/ticket.key
chmod 600 /etc/nginx/ticket.key
6. Kích Hoạt HTTP/2 (hoặc HTTP/3) Qua TLS
Cả hai giao thức đều đa luồng, giảm độ trễ cho việc tải trang. Trong Nginx 1.19+, bạn có thể dễ dàng kích hoạt HTTP/2:
listen 443 ssl http2;
# Đối với HTTP/3 (yêu cầu mô-đun quic)
# listen 443 ssl http3 reuseport;
Nếu bạn muốn thử nghiệm, hãy thử mô-đun HTTP/3 thử nghiệm để cải thiện dưới một phần triệu giây.
7. Kiểm Tra và Giám Sát Liên Tục
Việc tăng cường không phải là một nhiệm vụ một lần. Sử dụng các công cụ tự động để phát hiện sự suy giảm:
- Qualys SSL Labs – quét sâu miễn phí, đánh giá từ A- đến F.
- Mozilla Observatory – kiểm tra các tiêu đề theo quy tắc tốt nhất.
- Prometheus + node_exporter – giám sát độ trễ bắt tay TLS:
- job_name: 'nginx_tls'
static_configs:
- targets: ['localhost:9113']
Thiết lập cảnh báo cho thời gian bắt tay > 200 ms hoặc chứng chỉ hết hạn trong vòng 30 ngày.
Thêm: Giảm Tải Qua TLS Với Nén Brotli
Mặc dù không phải là cài đặt TLS, việc phục vụ tài sản nén qua HTTPS tiết kiệm băng thông mà không làm giảm bảo mật. Trong Nginx:
brotli on;
brotli_comp_level 6;
brotli_types text/plain text/css application/javascript application/json image/svg+xml;
Kết hợp điều này với nén tiêu đề của HTTP/2 để có trải nghiệm người dùng mượt mà hơn.
Kết luận
Một cấu hình TLS vững chắc trên Nginx bảo vệ dữ liệu, cải thiện hiệu suất và xây dựng niềm tin với người dùng. Bằng cách làm theo bảy bước trên - cập nhật giao thức, lựa chọn mã hóa, bảo đảm PFS, hoàn thiện chuỗi chứng chỉ, kích hoạt khôi phục phiên, bật HTTP/2/3 và kiểm tra liên tục - bạn sẽ có một điểm cuối HTTPS không có độ trễ, phù hợp với tương lai.
Khi bạn sẵn sàng kiểm tra toàn bộ ngăn xếp của mình hoặc cần một môi trường Linux được quản lý mà tôn trọng các thực hành tăng cường này, hãy xem qua https://lacidaweb.com để tìm giải pháp lưu trữ thân thiện với nhà phát triển.