DEV Community

Sreekanth Kuruba
Sreekanth Kuruba

Posted on

TLS 1.2 vs TLS 1.3 in Production (2025)

How We Reduced p95 Latency by 40% and Eliminated Certificate Incidents

Modern web performance depends on minimizing round trips. In late 2025, we evaluated our global traffic (300M+ requests/day) and found a surprising bottleneck:

Over 80% of our latency overhead came from TLS 1.2 handshakes — not from the application.

We migrated fully to TLS 1.3 across Cloudflare → ALB → Nginx.

Here's the data, the architecture impact, and the configuration used.


Executive Summary
Key Results:

Performance: 40% reduction in p95 latency

Reliability: Certificate incidents dropped to zero

Cost: 28% reduction in ALB CPU usage

Migration: 45 minutes, near-zero risk

Compatibility: 99.3% of traffic unaffected

1. The Simplest Analogy: Airport Security

TLS 1.2 = Old Airport Security

  • Remove shoes
  • Remove laptop
  • Two screening stages
  • Long waits for everyone

TLS 1.3 = Modern Fast-Track

  • Single unified check
  • Faster crypto negoatiation
  • PreCheck (0-RTT) for returning users

Exactly the same logic applies to round trips.


2. How the Handshake Changed

TLS 1.2 — 2 Round Trips

Client ──ClientHello────────────► Server
Client ◄─ServerHello+Cert──────── Server
Client ─────Finished────────────► Server
Client ◄────Finished───────────── Server
         ↑↑
     2 RTT required
Enter fullscreen mode Exit fullscreen mode

TLS 1.3 — 1 Round Trip

Client ──ClientHello+KeyShare───► Server
Client ◄─ServerHello+Finished──── Server
Client ─────Finished────────────► Server
         ↑
     1 RTT
Enter fullscreen mode Exit fullscreen mode

TLS 1.3 (Resume) — 0-RTT

Client ──Early Data──────────────► Server
Client ◄─Immediate Response─────── Server
         ↑
       0 RTT
Enter fullscreen mode Exit fullscreen mode

This is the core performance difference.

TLS protocol round-trip time comparison: TLS 1.2 (2 RTTs, slow) → TLS 1.3 (1 RTT, baseline) → TLS 1.3 Resume (0 RTT, instant


3. Real Production Data (Nov–Dec 2025)

After enabling TLS 1.3 everywhere:

Metric TLS 1.2 TLS 1.3 Improvement
p95 TTFB (global) 318 ms 194 ms –40%
Full handshakes ~40% <6% –85%
ALB CPU Baseline –28% Savings
Failed handshakes 1.2% 0.4% Higher compatibility
0-RTT usage 0% 58% Faster repeat visitors
Certificate pages 3–4/mo 0 Stability win

Largest gains:
India, Brazil, Indonesia, South Africa

  • broadly APAC, LATAM, Africa (naturally high RTT regions).

4. Why TLS 1.3 Wins (Operational view)

Fewer Round Trips

Connection setup time is the single biggest latency factor for first-time visitors.

High Resumption Success

TLS 1.3 replaces legacy session tickets with Pre-Shared Keys (PSKs), enabling:

  • 94–98% session reuse
  • Fewer full handshakes
  • Lower CPU cost

Simplified Cipher Suites

TLS 1.2 had 15–20 negotiable options.
TLS 1.3 has 5 secure defaults.

This removes misconfigurations entirely.

Forward Secrecy by Default

Impossible to accidentally weaken.

Ready for ECH (2025–2026)

Encrypted ClientHello = SNI protection + privacy upgrade


5. Configuration That Works Everywhere (2025)

Cloudflare

SSL/TLS → Edge Certificates → Minimum TLS Version = 1.3
Enter fullscreen mode Exit fullscreen mode

AWS ALB / CloudFront

Use any policy with TLS13:

ELBSecurityPolicy-TLS13-1-2-2021-06 or newer.

Nginx

ssl_protocols TLSv1.3;
ssl_early_data on;              # Enables 0-RTT safely for GET/HEAD
ssl_prefer_server_ciphers off;

ssl_session_cache shared:TLS:50m;
ssl_session_timeout 1d;
ssl_session_tickets off;        # Use PSK instead
Enter fullscreen mode Exit fullscreen mode

Caddy

tls {
    protocols tls1.3
}
Enter fullscreen mode Exit fullscreen mode

6. Monitoring Your TLS Migration

# Live TLS version monitoring
tail -f /var/log/nginx/access.log | \
  awk '{print $NF}' | \
  sort | uniq -c

# CloudWatch metrics (AWS)
aws cloudwatch get-metric-statistics \
  --metric-name ProcessedBytes \
  --namespace AWS/ApplicationELB \
  --statistics Sum \
  --dimensions Name=LoadBalancer,Value=your-alb

# TLS error tracking
grep -E "SSL|TLS" /var/log/nginx/error.log | \
  cut -d' ' -f6- | \
  sort | uniq -c | sort -rn

# Client compatibility check
curl -I https://yoursite.com -v 2>&1 | grep -E "TLS|SSL"
Enter fullscreen mode Exit fullscreen mode

Alert Threshold: >0.1% TLS 1.2 fallback after 7 days

7. When You Should Keep TLS 1.2 (Rare)

Organizations that commonly require fallback:

  • Banks with legacy proxies
  • Government/defense systems
  • Healthcare EMR systems
  • Windows Server 2008 environments

Recommended fallback:

ssl_protocols TLSv1.3 TLSv1.2;
ssl_ciphers "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-RSA-AES256-GCM-SHA384";
Enter fullscreen mode Exit fullscreen mode

Check TLS 1.2 traffic usage:

grep -c TLSv1.2 /var/log/nginx/access.log
Enter fullscreen mode Exit fullscreen mode

Most modern consumer traffic = <0.7% TLS 1.2.


8. ROI Calculator

For 100M monthly requests:

TLS 1.2: ~40M full handshakes
TLS 1.3: ~6M full handshakes
Reduction: 34M handshakes

AWS ALB cost impact:
- LCU cost: $0.008/hour
- Monthly savings: ~$2,100
- Annual: $25,200
Enter fullscreen mode Exit fullscreen mode

Performance ROI:

40% faster TTFB = better conversion rates

Improved Core Web Vitals = SEO boost

Reduced CDN egress = lower bandwidth costs


9. Recommended Migration Plan

Phase 1 — Observation (Day 1-7)

Enable TLS 1.3 with fallback. Monitor breakage.

ssl_protocols TLSv1.3 TLSv1.2;
Enter fullscreen mode Exit fullscreen mode

Phase 2 — Prefer TLS 1.3 (Day 8-14)

Prioritize TLS 1.3 in negotiation.
Monitor error rates.

Phase 3 — Enforce (Day 15+)

Disable TLS 1.2 once error rate stays below 0.1%.

ssl_protocols TLSv1.3;
Enter fullscreen mode Exit fullscreen mode

Total migration time for us: 45 minutes end-to-end.


10. CDN Provider Differences (2025)

Provider TLS 1.3 Default 0-RTT Support ECH Support
Cloudflare Yes Yes Rolling out
Akamai Yes (Edge) Limited Beta
Fastly Yes Yes Planned
AWS CloudFront Manual No No
GCP Cloud CDN Yes No No

What's your organization's TLS 1.3 status?

Enforced everywhere (100% TLS 1.3)

Enabled but with fallback

Still evaluating/testing

Not on roadmap yet

8. Final Recommendation

TLS 1.3 is not "new technology" anymore.
It is the expected baseline for global applications.

Upgrading gives you:

  • Faster connections
  • Better Core Web Vitals
  • Lower compute cost
  • Simplified security posture
  • Zero operational downsides

In 2025, continuing to rely on TLS 1.2 means accepting unnecessary latency on every single request.


Drop your thoughts in the comments below! 👇
Follow me for more deep dives into fundamental CS concepts made approachable!

Top comments (1)

Collapse
 
sreekanth_kuruba_91721e5d profile image
Sreekanth Kuruba

What's stopping you from disabling TLS 1.2 today?