HTTPS는 그저 TLS로 암호화된 채널 안에서 실행되는 HTTP다. TLS(Transport Layer Security)는 세 가지 보장을 준다: confidentiality(트래픽이 암호화됨), integrity(감지되지 않게 변조될 수 없음), authentication(당신이 certificate에 이름 붙은 서버와 정말로 통신하고 있음). 그것은 어떤 HTTP도 보내기 전에 handshake로 협상된다:
Client Server
│──── ClientHello ──────────────────────▶│ (TLS versions, cipher suites, random)
│◀─── ServerHello + Certificate ─────────│ (chosen cipher + cert with public key)
│ │
│ verify cert against a trusted CA │
│ agree on keys (e.g. ECDHE key exchange)│
│ │
│──── Finished (encrypted) ──────────────▶│
│◀─── Finished (encrypted) ───────────────│
│========= encrypted application data ====│ (now HTTP flows, encrypted)
