How does HTTPS work?

Key takeaways

  1. HTTPS - Hypertext Transfer Protocol Secure là giao thức mở rộng của HTTP. Nó sẽ encrypt data sử dụng Transport Layer Security (TLS). Nếu hacker lấy được data thì cũng chỉ là binary code.

  2. Mã hóa đối xứng: Kiểu như ROT-13.

  3. Mã hóa bất đối xứng: Sử dụng public-key và private-key.

    • Client và server sẽ trao đổi public key cho nhau. Tuy nhiên, trong
    • Trước khi gửi tin nhắn gì, họ sẽ dùng public key đó để encrypt message.
    • Khi nhận được encrypted message, mỗi bên sẽ dùng private key để giải mã.
  4. Nhưng hacker có thể giả mạo public key ngay trong lần trao đổi đầu tiên??? Giải pháp là bên server sẽ “nhờ” 1 bên thứ 3, đó là Certification Authority xác nhận chữ ký. Khi 2 bên trao đổi public key, ta sẽ nhờ 1 bên thứ 3 chứng nhận chữ ký đó.

  5. Quá trình này tốn rất nhiều thời gian, nên https chỉ sử dụng Mã hóa bất đối xứng cho việc trao đổi key. Sau khi trao đổi key xong rồi, họ sẽ dùng mã hóa đối xứng để trao đổi thông tin.

Flow

  • Mike gửi cho James 1 chiếc hộp, không khóa (chính là public key)
  • James nhận hộp, bỏ tin nhắn vào đó, đóng hộp lại, gửi lại cho Mike
  • Mike sử dụng private key - chìa khóa để mở hộp và đọc tin nhắn.

Nhưng nếu ngay lần đầu, Faker đã giả cái hộp của Mike, và gửi cho James hộp pha ke thì sao? Mike và James nhờ Tim - một người nổi tiếng chuyên đi ký cho những ai đã xác thực, ký vào cái hộp. (Certification Authority) Ngay khi nhận hộp lần đầu, James xác nhận đã có đúng chữ kí của Tim cho Mike không? ()

Flow hoàn chỉnh

Server Certificate Check

  1. Client send Hello
  2. Server send Hello + Send Certificate (Chứa public key, được verify bởi CA)
  3. Client (trình duyệt) sẽ verify lại với bên CA xem certificate trên kia có okie không? Ở bước này, nếu Hacker gửi 1 certificate fake sẽ thì sẽ bị phát hiện ra ngay.

Key Exchange

  1. Client tạo ra Session Key
  2. Gửi lên server các loại mã hóa mà client support; Server xác nhận nên sử dụng mã hóa nào.
  3. Encrypted key = Session Key + Server public key, sử dụng cipher suite ở bước 2.
  4. Client gửi encrypted key lên server.
  5. Server sử dụng server private key, để lấy ra Session Key. Lúc này thì cả Server và Client đều đã biết về Session key.

Data Transmission

  1. Trước khi gửi tin nhắn thì encrypt nó với Session Key
  2. Khi nhận được tin nhắn thì decrypt bằng Session Key

Notes

  • Trong HTTPS thông thường, chỉ Server mới cần bên Certificate Authority kí chứng nhận.