How HTTPS and TLS Really Work: A Step-by-Step Guide

Security2026-10-23TryQuickToolBox

You've probably seen the padlock icon in your browser and assumed your connection is secure. But what actually happens when you visit an HTTPS site? How does your browser know it's talking to the real server and not an impostor? And why does TLS sometimes slow down your site?

In this guide, we'll demystify HTTPS and TLS by walking through the handshake step by step. You'll learn the roles of certificates, symmetric and asymmetric encryption, and how to verify and optimize TLS in your own projects.

What HTTPS and TLS Actually Do

HTTPS is HTTP layered on top of TLS (Transport Layer Security). TLS provides three guarantees:

Without TLS, HTTP traffic is sent in plaintext. Anyone on the network path (Wi-Fi hotspots, ISPs, compromised routers) can read or alter it. TLS solves this by establishing a secure channel before any HTTP data is exchanged.

The TLS Handshake: Step by Step

The handshake is where the magic happens. It's a negotiation that establishes shared keys and verifies identities. Here's the simplified flow for TLS 1.2 and 1.3 (the two versions you'll encounter today).

Step 1: Client Hello

The client (browser) sends a ClientHello message containing:

Step 2: Server Hello and Certificate

The server responds with a ServerHello (chosen version, cipher suite, server random) and its certificate. The certificate contains the server's public key and is signed by a Certificate Authority (CA).

The client verifies the certificate: Is it expired? Is it issued by a trusted CA? Does the domain match? If not, the browser shows a warning.

Step 3: Key Exchange

Using the server's public key (or Diffie-Hellman parameters), the client and server derive a shared pre-master secret. In TLS 1.3, this is done with ephemeral Diffie-Hellman (ECDHE), providing forward secrecy: even if the server's private key is later compromised, past sessions remain secure.

Step 4: Finished

Both sides send a Finished message encrypted with the newly derived keys. If decryption succeeds, the handshake is complete. From then on, all application data (HTTP) is encrypted with symmetric encryption (e.g., AES-GCM or ChaCha20-Poly1305).

TLS 1.3 Improvements

TLS 1.3 reduces the handshake to one round trip (1-RTT) and supports 0-RTT resumption for repeat visitors. It also removes outdated algorithms, making it faster and more secure. Most modern browsers and servers support TLS 1.3.

Symmetric vs Asymmetric Encryption in TLS

TLS uses both types of encryption for good reason:

This hybrid approach gives you the security of public-key cryptography with the performance of symmetric ciphers.

Certificates: Trust Anchors

A certificate binds a public key to a domain name and is signed by a CA. Browsers and operating systems ship with a store of trusted root CAs. When a server presents its certificate, the client builds a chain of trust back to a trusted root.

Certificates have a limited lifetime (now often 90 days with Let's Encrypt). Expired certificates cause browser errors, so automate renewal.

Practical: Inspecting TLS with OpenSSL

You can inspect a server's TLS configuration using the openssl command-line tool. This helps debug handshake failures or verify cipher suites.

openssl s_client -connect example.com:443 -servername example.com -tls1_3

This connects to the server and prints the certificate chain, negotiated cipher, and session details. Look for Verify return code: 0 (ok) to confirm the certificate is valid.

To check certificate expiration:

echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates

Common TLS Pitfalls and How to Avoid Them

Optimizing TLS Performance

TLS adds latency due to the handshake. Here's how to minimize it:

FAQ

What is the difference between HTTPS and TLS?

HTTPS is the secure version of HTTP, and TLS is the cryptographic protocol that provides the security. HTTPS uses TLS to encrypt and authenticate the connection.

How does TLS provide forward secrecy?

Forward secrecy ensures that even if the server's private key is compromised, past session keys cannot be derived. It's achieved by using ephemeral Diffie-Hellman key exchange (ECDHE) in TLS 1.3 and modern TLS 1.2 configurations.

Why do I see certificate errors on some sites?

Certificate errors usually mean the certificate is expired, self-signed, issued for a different domain, or the certificate chain is incomplete. Browsers reject such certificates to protect you from man-in-the-middle attacks.

When you need to inspect or debug TLS connections, tools like Timestamp Converter can help you decode certificate validity periods and debug time-related issues.