HTTPS thực sự bảo vệ điều gì? TLS, certificate và HSTS

HTTPS là HTTP chạy qua TLS. Chữ S không làm website tử tế hơn; nó bảo vệ kênh truyền giữa client và server.

TLS cung cấp ba thuộc tính chính:

  • Confidentiality: dữ liệu trên đường truyền được mã hóa.
  • Integrity: dữ liệu bị sửa trên đường truyền có thể bị phát hiện.
  • Authentication: client xác minh server sở hữu certificate hợp lệ cho hostname.

HTTPS không ngăn server lừa người dùng, không sửa authorization sai và không cứu password 123456 khỏi chính chủ.

Certificate chain

Server gửi certificate và intermediate chain. Browser kiểm tra:

  • hostname có khớp SAN;
  • certificate còn hạn;
  • chữ ký dẫn tới root CA được tin tưởng;
  • certificate có bị revoke theo cơ chế client hỗ trợ hay không.

Certificate chứa public key; private key phải giữ ở server hoặc key-management system. Lộ private key thì cần revoke/rotate, không phải đổi màu ổ khóa.

TLS handshake, bản rút gọn

  1. Client và server thương lượng phiên bản/cipher suite.
  2. Server chứng minh identity bằng certificate và chữ ký.
  3. Hai bên tạo shared session keys.
  4. HTTP được truyền qua kênh mã hóa đối xứng.

TLS hiện đại dùng ephemeral key exchange để hỗ trợ forward secrecy: lộ private key sau này không mặc định giải mã được traffic cũ đã ghi lại.

Redirect chưa đủ: dùng HSTS

Redirect HTTP → HTTPS vẫn cho request HTTP đầu tiên cơ hội bị can thiệp. HSTS yêu cầu browser chỉ dùng HTTPS cho domain trong thời hạn nhất định:

1
Strict-Transport-Security: max-age=31536000; includeSubDomains

Chỉ bật includeSubDomains/preload khi toàn bộ subdomain đã hỗ trợ HTTPS; header bảo mật cấu hình sai cũng có thể tự DDoS bằng quy trình rất standards-compliant.

Checklist

  • Chỉ hỗ trợ TLS hiện đại.
  • Tự động renew certificate và monitor expiry.
  • Redirect HTTP sang HTTPS.
  • Bật HSTS sau khi kiểm tra subdomain.
  • Đặt cookie Secure.
  • Không mixed content.
  • Bảo vệ private key và rotate khi cần.

References