Forwarding client mutual TLS (mTLS) certificate details to backend application microservices via HTTP request headers requires careful testing to ensure certificate subjects and SHA-256 fingerprints are decoded correctly. Traefik’s PassTLSClientCert middleware parses client x509 certificates and injects sanitised pem-encoded headers. Windows Sandbox on Windows 11 provides an isolated container for validating mTLS header injection safely.
Why Test PassTLSClientCert in Windows Sandbox
Testing mutual TLS setups directly on developer machines often pollutes local certificate trust stores. Launching Traefik inside an isolated Windows Sandbox enables engineers to generate self-signed test root CAs, issue ephemeral client certificates, and verify proxy header forwarding without touching host certificate authorities.
Authoring the Windows Sandbox WSB XML
Save the following XML document as TraefikMTLSSandbox.wsb on your Windows 11 machine:
<Configuration>
<VGpu>Default</VGpu>
<Networking>Default</Networking>
<MappedFolders>
<MappedFolder>
<HostFolder>C:\TraefikMTLSLab</HostFolder>
<SandboxFolder>C:\TraefikMTLSLab</SandboxFolder>
<ReadOnly>true</ReadOnly>
</MappedFolder>
</MappedFolders>
<LogonCommand>
<Command>powershell.exe -ExecutionPolicy Bypass -NoExit -File C:\TraefikMTLSLab\setup-mtls.ps1</Command>
</LogonCommand>
</Configuration>
PowerShell Deployment Bootstrapper
Save the bootstrapping script as C:TraefikMTLSLabsetup-mtls.ps1:
Write-Host "Setting up Traefik PassTLSClientCert Lab..." -ForegroundColor Cyan
$Dir = "C:Traefik"
New-Item -ItemType Directory -Force -Path $Dir | Out-Null
$ZipUrl = "https://github.com/traefik/traefik/releases/download/v3.0.0/traefik_v3.0.0_windows_amd64.zip"
Invoke-WebRequest -Uri $ZipUrl -OutFile "$Dir raefik.zip"
Expand-Archive -Path "$Dir raefik.zip" -DestinationPath $Dir -Force
$Config = @"
http:
middlewares:
mtls-header-pass:
passTLSClientCert:
pem: true
info:
notAfter: true
notBefore: true
sans: true
subject:
country: true
province: true
locality: true
organization: true
commonName: true
routers:
secure-mtls:
rule: "PathPrefix(`/mtls`)"
middlewares:
- "mtls-header-pass"
service: "backend-service"
services:
backend-service:
loadBalancer:
servers:
- url: "http://127.0.0.1:8080"
"@
Set-Content -Path "$Dirdynamic_conf.yml" -Value $Config
Write-Host "Traefik PassTLSClientCert Configured for mTLS Header Forwarding." -ForegroundColor Green
Testing Header Forwarding Workflows
Launch the sandbox configuration and run curl requests with client certificate arguments against https://127.0.0.1/mtls. Verify that backend services receive X-Forwarded-Tls-Client-Cert-Info and X-Forwarded-Tls-Client-Cert headers cleanly.