# Exercise 1 — Tracing a Handshake and Diagnosing a Trust Failure

## Scenario

A browser is connecting to `https://shop.example.com`, which is fronted by a CDN serving many different customer domains from shared IP addresses.

## Deliverables

1. **Full handshake trace.** Write out the TLS handshake between the browser and the CDN edge server step by step (per theory section 2), including what specific piece of information in the ClientHello lets the CDN present the correct certificate for `shop.example.com` out of the many certificates it holds for different customers — name that mechanism explicitly and explain why it has to happen in plaintext (theory section 4).

2. **Chain verification.** The CDN presents a certificate chain: `shop.example.com's cert -> "ExampleCA Intermediate" -> "ExampleCA Root"`. Walk through, step by step, what the browser checks to decide whether to trust this chain (theory section 3), and state one specific reason the browser would reject the connection even if every signature in the chain verifies correctly.

3. **Diagnose a real failure.** A user reports their browser shows "Your connection is not private" for `shop.example.com`, but colleagues on other machines see no warning. Given that the certificate itself is valid and correctly configured on the server, propose one specific, plausible client-side cause for this (not a server misconfiguration) and explain how you'd confirm it.

4. **Version negotiation.** State what the ServerHello step of the handshake is responsible for negotiating (theory section 2 and 5), and describe what happens if the client only supports TLS 1.2 while the server only supports TLS 1.3 — would this connection succeed or fail, and why?
