Deep SSL Inspection Breaks Certificate-Pinned Mobile Apps & Cloud SDKs
Deploying full Deep SSL/TLS inspection causes mobile banking applications, iOS/Android corporate apps, AWS/Azure CLI SDKs, and developer tooling to instantly abort TLS handshakes with fatal certificate rejection errors due to hardcoded public key pinning.
Technical Root Cause Analysis
When a firewall policy executes Deep SSL inspection, the wad worker acts as an explicit man-in-the-middle proxy. It negotiates an upstream TLS session with the origin server, extracts the server's identity attributes, and generates a dynamic certificate on-the-fly signed by the FortiGate subordinate or root Certificate Authority.
High-security mobile applications (retail banking, payment processors, healthcare portals) and modern developer tooling (such as AWS CLI, Google Cloud SDK, Docker, and PyPI) utilize Certificate Pinning (HPKP or SPKI hash matching). Rather than accepting any certificate issued by a trusted root in the OS certificate repository, the application's compiled bytecode validates that the SHA-256 fingerprint of the server's public key strictly matches a pre-baked static cryptographic value. Because FortiGate dynamically regenerates new public/private key pairs during inspection, the public key hash verification fails, prompting the client to transmit a fatal TLS alert (Level: Fatal, Description: Certificate Unknown [46]) and sever the connection immediately.
Affected Firmware & Blast Radius Matrix
| FortiOS Branch | Vulnerable Configurations | Recommended Architecture | Status & Workaround |
|---|---|---|---|
| FortiOS 7.6 | Deep inspection without exemption table | Dynamic SNI bypass enabled | Enable SSL category and wildcard exemptions |
| FortiOS 7.4 | Deep inspection without exemption table | SNI bypass enabled | Apply domain bypass to ssl-ssh-profile |
| FortiOS 7.2 | Deep inspection on banking/SDK endpoints | Certificate-inspection fallback | Separate policy with custom ssl-ssh-profile |
| FortiOS 7.0 | Deep inspection on banking/SDK endpoints | Static FQDN bypass | Address group exemption before deep profile |
Platform Impact: All FortiGate hardware and VM appliances running deep SSL inspection across corporate Wi-Fi, BYOD networks, developer subnets, and branch offices.
Step 01: Free Verification CLI (Safe Read-Only)
Execute these commands to detect TLS handshake alert failures and inspect active SSL profile inspection modes:
Diagnostic Commands
# 1. Check live WAD worker SSL decrypter counters and alert drops
diagnose test application wad 1000
# 2. Inspect active SSL/SSH profile configuration and exemption status
show firewall ssl-ssh-profile
# 3. View global firewall session statistics and SSL drop counters
diagnose firewall session full-stat
# 4. Filter active TLS handshake failures in WAD debug logs
diagnose debug application wad 128
diagnose debug enable
Remediation & Workaround Steps (Teaser Preview)
Restore critical mobile and developer applications while preserving deep decryption for browser-based web traffic:
Frequently Asked Questions
Certificate pinning is a security mechanism where client applications hardcode the expected Subject Public Key Info (SPKI) hash or leaf certificate of their target servers. During Deep SSL inspection, FortiGate decrypts traffic by re-signing dynamic certificates using its own local CA. Even if the enterprise CA is installed in the device OS trust store, the application rejects the connection because the public key hash does not match the pinned value.
Yes. FortiOS includes a built-in FortiGuard SSL exemption database for common services (Apple APNs, Google Play, banking institutions) under 'config firewall ssl-ssh-profile' by enabling 'set ssl-exempt-table enable'. However, proprietary in-house enterprise apps and third-party developer tools require custom wildcard FQDN exemptions.
No. When an application is exempted from deep inspection, FortiOS falls back to certificate inspection (SNI parsing). Web filtering, DNS filtering, and network-layer L4 firewall rules remain fully active while leaving the TLS payload intact.