HTTPS ist einfach HTTP, das innerhalb eines TLS-verschlüsselten Kanals läuft. TLS (Transport Layer Security) gibt dir drei Garantien: confidentiality (Traffic ist verschlüsselt), integrity (er kann nicht unbemerkt manipuliert werden) und authentication (du sprichst wirklich mit dem im Zertifikat genannten Server). Es wird in einem handshake ausgehandelt, bevor irgendein HTTP gesendet wird:
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)
