0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

7 Mẹo Củng Cố TLS và HTTP/2 Trên Nginx Cho Sản Xuất

Đăng vào 2 tuần trước

• 5 phút đọc

Tại Sao Củng Cố TLS Lại Quan Trọng

Transport Layer Security (TLS) là hàng rào bảo vệ đầu tiên cho bất kỳ dịch vụ web nào có mặt công khai. Một cấu hình TLS không đúng cách có thể làm lộ trang web của bạn trước các cuộc tấn công hạ cấp, khai thác mã hóa yếu và thậm chí là rò rỉ dữ liệu. Khi bạn thêm HTTP/2 vào trong hỗn hợp, bạn sẽ có được lợi ích về hiệu suất - nhưng chỉ khi cấu hình TLS dưới nền tảng được củng cố vững chắc. Hướng dẫn này sẽ hướng dẫn bạn qua bảy bước thực tiễn để khóa chặt TLS và kích hoạt HTTP/2 trên Nginx, nhắm đến các kỹ sư vận hành cần một giải pháp bảo mật, hiệu suất cao.


1. Thực Thi Các Phiên Bản Giao Thức Hiện Đại

Các giao thức cũ như SSLv3, TLS 1.0 và TLS 1.1 được coi là không an toàn. Nginx cho phép bạn chỉ định chính xác các phiên bản nào sẽ được thương lượng.

nginx Copy
ssl_protocols TLSv1.2 TLSv1.3;   # Chỉ cho phép TLS 1.2 và 1.3
ssl_prefer_server_ciphers on;   # Máy chủ quyết định thứ tự mã hóa

TLS 1.3 cung cấp bí mật phía trước theo mặc định và giảm độ trễ của quá trình bắt tay, trong khi TLS 1.2 vẫn cần thiết cho những trình duyệt cũ chưa hỗ trợ 1.3.


2. Lựa Chọn Bộ Mã Hóa Mạnh

Danh sách mã hóa được lựa chọn sẽ loại bỏ các thuật toán yếu (ví dụ: DES, 3DES, RC4) và ưu tiên các mã hóa AEAD với tính năng bí mật phía trước.

nginx Copy
ssl_ciphers \
  "TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:" \
  "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:" \
  "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256";

Thứ tự là rất quan trọng: Nginx sẽ chọn mã hóa đầu tiên được hỗ trợ lẫn nhau. Danh sách trên phản ánh khuyến nghị "Trung bình" của Mozilla, cân bằng giữa khả năng tương thích và bảo mật.


3. Bật HTTP/2 Một Cách An Toàn

HTTP/2 yêu cầu TLS trên hầu hết các trình duyệt, và Nginx có thể bật nó với một chỉ thị duy nhất. Tuy nhiên, bạn cũng nên tắt chỉ thị server_tokens để tránh rò rỉ thông tin phiên bản.

nginx Copy
listen 443 ssl http2;
server_tokens off;

Nếu bạn cần hỗ trợ HTTP/1.1 cho các khách hàng cũ, Nginx sẽ tự động quay lại.


4. Củng Cố Bảo Mật Tiêu Đề

Các tiêu đề liên quan đến bảo mật thêm một lớp bảo vệ khác chống lại clickjacking, sniffing MIME và các vấn đề về nội dung hỗn hợp.

nginx Copy
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options DENY;
add_header Referrer-Policy "no-referrer-when-downgrade";
add_header Content-Security-Policy "default-src 'self'";

Tiêu đề HSTS yêu cầu các trình duyệt luôn sử dụng HTTPS trong hai năm tới và báo hiệu sẵn sàng cho danh sách preload của Chrome.


5. Cấu Hình OCSP Stapling

OCSP stapling giảm độ trễ và bảo vệ chống lại các cuộc tấn công thu hồi chứng chỉ. Nó yêu cầu một ssl_trusted_certificate hợp lệ chứa toàn bộ chuỗi CA của bạn.

nginx Copy
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/ssl/certs/ca-bundle.crt;
resolver 8.8.8.8 8.8.4.4 valid=300s;   # DNS của Google cho OCSP queries

Với stapling được bật, máy chủ sẽ trình bày phản hồi OCSP trong quá trình bắt tay TLS, loại bỏ vòng đi vòng lại không cần thiết tới CA.


6. Tối Ưu Hóa Khôi Phục Phiên

TLS session tickets và session caches giúp tăng tốc độ kết nối lại. Đối với hầu hết các môi trường sản xuất, bật cả hai là an toàn.

nginx Copy
ssl_session_cache shared:SSL:10m;   # Khoảng 4000 phiên
ssl_session_timeout 1d;
ssl_session_tickets on;            # Bật ticket (mặc định trong Nginx hiện đại)

Nếu bạn có các yêu cầu tuân thủ nghiêm ngặt, bạn có thể tắt ticket và chỉ dựa vào cache phía máy chủ.


7. Kiểm Tra, Giám Sát và Tự Động Gia Hạn

Một cấu hình được củng cố chỉ hữu ích nếu bạn biết nó hoạt động. Sử dụng các công cụ như Qualys SSL Labs, testssl.sh, hoặc openssl s_client để xác minh hỗ trợ giao thức và mã hóa.

bash Copy
# Kiểm tra nhanh OpenSSL
openssl s_client -connect example.com:443 -tls1_3 -servername example.com

Thiết lập giám sát tự động với Prometheus + node_exporter để cảnh báo về các thất bại trong quá trình bắt tay TLS hoặc chứng chỉ đã hết hạn. Kết hợp điều này với certbot hoặc acme.sh để gia hạn không có thời gian chết.

bash Copy
# Ví dụ về hook gia hạn certbot reload Nginx
#!/bin/sh
/usr/sbin/nginx -s reload

Tóm Tắt Tất Cả

Dưới đây là một khối máy chủ tối thiểu nhưng sẵn sàng cho sản xuất, tích hợp bảy mẹo:

nginx Copy
server {
    listen 443 ssl http2;
    server_name www.example.com;

    # Cơ bản về TLS
    ssl_certificate     /etc/ssl/certs/example.com.crt;
    ssl_certificate_key /etc/ssl/private/example.com.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256";

    # Xử lý phiên
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_session_tickets on;

    # OCSP stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/ssl/certs/ca-bundle.crt;
    resolver 8.8.8.8 8.8.4.4 valid=300s;

    # Tiêu đề bảo mật
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options DENY;
    add_header Referrer-Policy "no-referrer-when-downgrade";
    add_header Content-Security-Policy "default-src 'self'";
    server_tokens off;

    # Thư mục ứng dụng
    root /var/www/html;
    index index.html index.htm;
}

Triển khai khối này, tải lại Nginx (nginx -s reload), và thực hiện một quét nhanh SSL Labs. Bạn sẽ thấy xếp hạng "A+" mà không có cảnh báo về giao thức hoặc mã hóa.


Suy Nghĩ Cuối Cùng

Việc củng cố TLS và kích hoạt HTTP/2 trên Nginx là một khoản đầu tư ít công sức nhưng có ảnh hưởng lớn cho bất kỳ trang web sản xuất nào. Bằng cách làm theo bảy bước này, bạn sẽ có được mã hóa mạnh hơn, bắt tay nhanh hơn và cái nhìn tốt hơn về các cấu hình sai có thể xảy ra. Hãy nhớ coi TLS như một thành phần sống: lên lịch quét định kỳ, giữ cho thư viện OpenSSL của bạn luôn cập nhật và tự động hóa việc gia hạn chứng chỉ. Để tìm hiểu sâu hơn về tối ưu hóa hiệu suất Nginx và các nghiên cứu trường hợp thực tế, hãy kiểm tra https://lacidaweb.com để có các hướng dẫn thực tiễn và cái nhìn từ cộng đồng.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào