Skip to main content
Decrypt HTTPS Traffic in Fiddler: A Complete SSL/TLS Decryption Guide
HTTP/HTTPS Capture7 min read

Decrypt HTTPS Traffic in Fiddler: A Complete SSL/TLS Decryption Guide

A complete, step-by-step Fiddler tutorial for decrypting HTTPS traffic — covering certificate trust, mobile setup, troubleshooting, and TLS 1.3 support.

Share:

Fiddler is the de facto standard HTTP debugging proxy for developers and QA engineers — but its real superpower lies in decrypting HTTPS traffic. Without proper SSL/TLS decryption, you’re blind to encrypted API calls, authentication flows, and third-party service integrations. This guide walks you through every step of enabling and troubleshooting HTTPS decryption in Fiddler — from certificate installation to edge-case resolution — so you can inspect, modify, and debug live TLS-encrypted traffic with confidence.

Why HTTPS Decryption Matters for HTTP Debugging

Modern web apps rely almost exclusively on HTTPS. Browsers enforce it. APIs require it. Even localhost development servers now default to TLS. If your fiddler debugging workflow stops at HTTP, you’re missing >95% of real-world traffic. Decrypting SSL/TLS isn’t just about visibility — it’s essential for validating token exchanges, auditing header injection, testing OAuth2 redirects, and reverse-engineering mobile app backend calls. Without it, your fiddler proxy acts as a black box for encrypted payloads.

Fiddler achieves decryption by acting as a man-in-the-middle (MITM) proxy: it dynamically generates certificates signed by its own root CA, intercepts TLS handshakes, and re-encrypts traffic between client and server. This requires explicit trust — and careful configuration.

Step 1: Enable HTTPS Decryption in Fiddler Options

Start Fiddler (v5.0.20234.47100 or later recommended). Go to Tools > Options > HTTPS.

✅ Check Decrypt HTTPS traffic.

✅ Ensure Ignore server certificate errors is enabled — this bypasses validation failures when Fiddler’s generated cert doesn’t match the target domain’s public key.

⚠️ Do not check “Capture HTTPS CONNECTs” unless debugging non-browser clients that use raw tunneling (e.g., some .NET HttpClient configurations). Most modern browsers and apps handle CONNECT differently — enabling this unnecessarily floods your session list with empty tunnels.

Click OK. Fiddler will prompt you to install its root certificate if it hasn’t been trusted yet.

Step 2: Install and Trust the Fiddler Root Certificate

Fiddler auto-generates a unique root certificate (DO_NOT_TRUST_FiddlerRoot) stored in %USERPROFILE%\AppData\Local\Fiddler2\Certificates. To decrypt HTTPS, your OS and applications must trust it.

Windows (Browser & System Trust)

  1. In Fiddler, go to Tools > Options > HTTPS > Actions > Export Root Certificate to Desktop.
  2. Double-click the exported .cer file → Install Certificate.
  3. Choose Local Machine (requires Admin), then Place all certificates in the following storeTrusted Root Certification Authorities.
  4. Click Finish → Yes to UAC prompt.

💡 Pro tip: Also import into Current User > Trusted Root Certification Authorities if running Fiddler without admin privileges.

Chrome & Edge (Chromium-based)

Chromium browsers use the OS certificate store by default, but may cache untrusted certs. After installing the root cert:

  • Clear browser cache (Ctrl+Shift+Del → “Cached images and files”).
  • Restart Chrome/Edge completely (check Task Manager for lingering chrome.exe processes).
  • Visit https://example.com — no “Your connection is not private” warning = success.

Firefox (Separate Certificate Store)

Firefox maintains its own trust store:

  1. Open about:preferences#privacy → Scroll to CertificatesView Certificates.
  2. Go to Authorities tab → Import → Select the exported FiddlerRoot.cer.
  3. Check Trust this CA to identify websites → OK.

🔁 Restart Firefox after import. Test with https://httpbin.org/get — response should appear in Fiddler’s Web Sessions list.

Step 3: Configure Applications That Don’t Use System Proxy

Browsers obey system proxy settings — but many apps don’t. For effective fiddler debugging across tools, configure them manually:

cURL / PowerShell / CLI Tools

Use --proxy http://127.0.0.1:8888:

curl --proxy http://127.0.0.1:8888 https://httpbin.org/get

For PowerShell Invoke-RestMethod, set proxy explicitly:

$proxy = "http://127.0.0.1:8888"
Invoke-RestMethod -Uri "https://httpbin.org/get" -Proxy $proxy

.NET Applications (C#)

Set HttpClientHandler proxy:

var handler = new HttpClientHandler {
    Proxy = new WebProxy("http://127.0.0.1:8888"),
    UseProxy = true
};
using var client = new HttpClient(handler);

Mobile Devices (iOS/Android)

Configure device Wi-Fi to use Fiddler’s IP + port (e.g., 192.168.1.10:8888). Then install the FiddlerRoot certificate manually:

  • iOS: Email .cer → Open in Mail → Tap install → Settings → General → About → Certificate Trust Settings → Enable FiddlerRoot.
  • Android: Settings → Security → Install from storage → select .cer. On Android 7+, also enable “Install unknown apps” for your file manager.

more tutorials for mobile-specific setup workflows.

Step 4: Troubleshooting Common HTTPS Decryption Failures

Even with correct setup, HTTPS decryption fails silently in many cases. Here’s how to diagnose and fix them.

❌ “Tunnel to host:443” appears — no request body or headers

This means Fiddler received a CONNECT request but couldn’t decrypt the TLS stream. Causes:

  • Missing or untrusted FiddlerRoot certificate (reinstall + verify trust).
  • Application bypasses system proxy (e.g., Java apps using -Djava.net.useSystemProxies=false).
  • Antivirus or firewall blocking port 8888 or interfering with certificate trust.

🔍 Diagnose: Right-click the Tunnel to... session → Inspectors > Raw. If you see only HTTP/1.1 200 Connection established, decryption failed upstream.

❌ “403 Forbidden” or “502 Bad Gateway” on HTTPS requests

Often caused by server-side certificate pinning (e.g., Android apps using CertificatePinner, or websites enforcing HPKP/Expect-CT). Fiddler’s MITM breaks pinned certs.

🛠 Workaround:

  • Disable pinning temporarily (if source-controlled or debug build).
  • Use Fiddler’s Rules > Customize Rules (OnBeforeResponse) to strip security headers like Public-Key-Pins, Expect-CT, or Strict-Transport-Security (only for testing):
if (oSession.oResponse.headers.ExistsAndContains("X-Frame-Options", "DENY")) {
    oSession.oResponse.headers.Remove("X-Frame-Options");
}

❌ Certificate warnings persist in Chrome despite root install

Chrome caches certificate trust state aggressively. Try:

  • Clear all browsing data (including cookies and cached images).
  • Launch Chrome with --ignore-certificate-errors flag (for dev-only use).
  • Run chrome://restart after cert install.

❌ Fiddler shows “Failed to decrypt HTTPS” in status bar

Check Tools > Options > HTTPS > Advanced Options:

  • Uncheck Use HTTPS decoding for all connections if targeting legacy TLS 1.0/SSL 3.0 (rare today).
  • Ensure Decrypt HTTPS traffic remains checked and Fiddler has permission to generate certs (Admin mode helps on locked-down enterprise machines).

Step 5: Advanced HTTPS Decryption Scenarios

Decoding TLS 1.3 Traffic

Fiddler fully supports TLS 1.3 decryption — no extra config needed. However, some TLS 1.3 implementations (especially in Electron or custom Rust/Go clients) skip session resumption or use early data features that obscure handshake timing. If sessions show incomplete handshakes, check:

  • Whether the client sends ClientHello with supported versions including TLS 1.3.
  • Whether Fiddler’s internal TLS stack negotiates 1.3 successfully (visible in Inspectors > TextView > Raw under ClientHello/ServerHello).

Decrypting Localhost HTTPS (e.g., `https://localhost:3000`)

Modern browsers block MITM for localhost by default. Fix via:

  • Adding localhost to Fiddler’s HTTPS > Decrypt HTTPS traffic > Do not decrypt exclusion list — then remove it.
  • Or, more reliably: launch browser with --unsafely-treat-insecure-origin-as-secure="http://localhost:3000" --user-data-dir=/tmp/fiddler-profile (Chromium flags).

Exporting Decrypted Sessions for Audit

Once decrypted, export full HTTPS requests/responses for compliance or team review:

  • Select sessions → Right-click → Export Sessions > Selected Sessions > HTTPArchive (.har).
  • Or use File > Export Sessions > All Sessions → choose SAZ (Fiddler Archive) for full fidelity including raw TLS bytes and decrypted bodies.

browse HTTP/HTTPS Capture tutorials for HAR analysis and automated replay workflows.

Conclusion: Master Your HTTPS Debugging Workflow

Enabling HTTPS decryption transforms Fiddler from an HTTP inspector into a full-stack TLS observability tool. You now know how to:

  • Configure Fiddler’s HTTPS options correctly,
  • Install and validate the FiddlerRoot certificate across browsers and platforms,
  • Extend decryption to CLI tools, mobile devices, and custom apps,
  • Diagnose and resolve common decryption failures,
  • And handle advanced cases like TLS 1.3, localhost, and certificate-pinned services.

Remember: HTTPS decryption is a powerful capability — use it ethically, only on systems you own or have explicit permission to test. Never deploy FiddlerRoot in production environments.

With these skills, your fiddler debugging sessions gain full visibility into encrypted payloads, headers, cookies, and auth tokens — turning opaque TLS streams into actionable insights. Combine this with contact us if you hit edge cases not covered here; we’ll help you adapt the workflow to your stack.

Whether you’re validating JWT claims, tracing CORS preflights, or debugging gRPC-Web over HTTPS, mastering https decryption is foundational to modern fiddler tutorial fluency. It’s not optional — it’s essential.

Share:

Related Topics

fiddler tutorialfiddler debugginghttp debuggingfiddler proxyhttps decryption

Get Fiddler Tips & Tutorials

Stay updated with the latest Fiddler tutorials, HTTP debugging guides, request modification tips, and web traffic analysis techniques.

Free forever. New tutorials published daily.

Related Articles