Back to Guides
F5 BIG-IPTroubleshootingRunbookDebug

F5 BIG-IP SSL Troubleshooting

Debug common SSL issues on BIG-IP - symptom by symptom.

15 min readDecember 2025
F5 SSL Troubleshooting - Debug Common Issues

The 30-Second Version

Quick checks for most SSL issues:

  1. Is the chain configured? (Client SSL Profile → Certificate Key Chain → Chain)
  2. Is the profile assigned to the VS? (Virtual Server → SSL Profile Client)
  3. What does openssl s_client show?

Enable debug logging:

tmsh modify sys db tmm.ssl.log level debug

Disable when done:

tmsh modify sys db tmm.ssl.log level warning

Symptom Index

Jump to your symptom:

SymptomMost Likely CauseJump To
"Certificate not trusted"Missing chainSection 2
SSL handshake failureCipher/TLS mismatchSection 3
Wrong certificate showingSNI or profile issueSection 4
Connection reset/timeoutProfile not assigned or VS issueSection 5
"Certificate expired"Obvious, but check which certSection 6
Intermittent SSL failuresHA sync or profile mismatchSection 7

"Certificate Not Trusted"

Symptom: Some clients show certificate errors, often mobile apps or API clients, while browsers work fine.

Step 1: Check if Chain is Being Sent

# Count certificates in response (should be 2 or more)
echo | openssl s_client -connect YOUR-VIP:443 -servername YOUR-DOMAIN 2>/dev/null | \
  grep -c "BEGIN CERTIFICATE"
ResultMeaningAction
1Only server cert, no chainAdd chain to profile
2+Chain is being sentCheck chain validity
0SSL not working at allCheck profile assignment

Step 2: Verify Chain in Profile

# Check profile configuration
tmsh list ltm profile client-ssl YOUR-PROFILE cert-key-chain

Look for the chain field. If empty or missing, that's your problem.

Step 3: Add or Fix Chain

Path: Local Traffic → Profiles → SSL → Client → [Profile] → Certificate Key Chain

  1. Edit the Certificate Key Chain entry
  2. Set Chain to your intermediate certificate
  3. Click Update

Step 4: Verify Fix

# Should now show 2+ certificates
echo | openssl s_client -connect YOUR-VIP:443 -servername YOUR-DOMAIN 2>/dev/null | \
  grep -c "BEGIN CERTIFICATE"

Still Not Working?

F5 silently drops the chain if it doesn't match your certificate's issuer. Verify:

# Your cert's issuer
openssl s_client -connect YOUR-VIP:443 -servername YOUR-DOMAIN 2>/dev/null | \
  openssl x509 -noout -issuer

# Your chain cert's subject (should match above)
tmsh list sys crypto cert YOUR-CHAIN-CERT | grep subject

If they don't match, download the correct intermediate from your CA.

SSL Handshake Failures

Symptom: Connection fails before page loads. Errors like "SSL handshake failed," "no common cipher," or "protocol version" errors.

Step 1: Enable Debug Logging

# Enable SSL debug logging
tmsh modify sys db tmm.ssl.log level debug

# Watch the logs
tail -f /var/log/ltm | grep -i ssl

Remember to disable when done:

tmsh modify sys db tmm.ssl.log level warning

Step 2: Test with OpenSSL

# Basic connection test
openssl s_client -connect YOUR-VIP:443 -servername YOUR-DOMAIN

# Test specific TLS version
openssl s_client -connect YOUR-VIP:443 -servername YOUR-DOMAIN -tls1_2
openssl s_client -connect YOUR-VIP:443 -servername YOUR-DOMAIN -tls1_3

# Test specific cipher
openssl s_client -connect YOUR-VIP:443 -servername YOUR-DOMAIN -cipher 'ECDHE-RSA-AES256-GCM-SHA384'

Step 3: Check Cipher Configuration

# See what ciphers your profile allows
tmsh list ltm profile client-ssl YOUR-PROFILE ciphers

# See what that cipher string actually produces
tmm --clientciphers 'YOUR-CIPHER-STRING'

Common Cipher Issues

Error in LogCauseFix
"no shared cipher"Client and F5 have no ciphers in commonExpand cipher list in profile
"wrong version number"TLS version mismatchCheck Options setting for TLS versions
"certificate verify failed"Server SSL profile can't verify backendSet Server Authentication to Ignore, or add CA

Step 4: Check TLS Versions

# See enabled TLS versions
tmsh list ltm profile client-ssl YOUR-PROFILE options

Common Options settings:

  • no-tlsv1 - Disable TLS 1.0
  • no-tlsv1.1 - Disable TLS 1.1
  • no-tlsv1.3 - Disable TLS 1.3 (don't do this usually)

Wrong Certificate Showing

Symptom: Clients receive a certificate for the wrong domain, or receive the F5's default certificate.

Step 1: Check SNI Behavior

# Test with specific SNI
openssl s_client -connect YOUR-VIP:443 -servername www.example.com

# Test without SNI (might get default cert)
openssl s_client -connect YOUR-VIP:443

Step 2: Check Virtual Server Profile Assignment

tmsh list ltm virtual YOUR-VS profiles

Look for:

  • context clientside = Client SSL profile
  • The correct profile name

Step 3: Multiple Profiles on Same VS (SNI)

If you have multiple Client SSL profiles on the same virtual server for SNI:

# List all profiles on the VS
tmsh list ltm virtual YOUR-VS profiles

# Check Default SSL Profile for SNI
tmsh list ltm profile client-ssl YOUR-PROFILE sni-default

One profile should have sni-default true - this is served when SNI doesn't match.

Step 4: Check Certificate Matches Domain

# See what domain the certificate covers
tmsh list sys crypto cert YOUR-CERT subject-alternative-name
tmsh list sys crypto cert YOUR-CERT common-name

Connection Reset/Timeout

Symptom: Connection times out or resets. No SSL handshake even starts.

Step 1: Verify Virtual Server is Listening

# Check VS status
tmsh show ltm virtual YOUR-VS

# Look for:
# - State: enabled
# - Availability: available

Step 2: Check Profile is Assigned

tmsh list ltm virtual YOUR-VS profiles

# Should show a client-ssl profile with "context clientside"

If no SSL profile is assigned, HTTPS won't work.

Step 3: Check Port and IP

# Verify VS is on port 443
tmsh list ltm virtual YOUR-VS destination

# Test connectivity
nc -zv YOUR-VIP 443

Step 4: Check Pool Status

# If pool members are down, VS might not respond
tmsh show ltm pool YOUR-POOL members

Certificate Expired

Symptom: Certificate expiration warnings or errors.

Step 1: Check Certificate Dates

# From outside
echo | openssl s_client -connect YOUR-VIP:443 -servername YOUR-DOMAIN 2>/dev/null | \
  openssl x509 -noout -dates

# From F5
tmsh list sys crypto cert YOUR-CERT expiration-string

Step 2: List All Certificates with Expiration

# tmsh - shows all certs
tmsh list sys crypto cert | grep -E "(sys crypto cert|expiration)"

# Or check specific cert
tmsh run sys crypto check-cert cert name YOUR-CERT

Step 3: Check Which Cert is Actually Expired

Sometimes it's the intermediate, not your certificate:

# See full chain with dates
openssl s_client -connect YOUR-VIP:443 -servername YOUR-DOMAIN -showcerts 2>/dev/null | \
  openssl x509 -noout -dates

Intermittent SSL Failures

Symptom: SSL works sometimes, fails other times. Inconsistent behavior.

Step 1: Check HA Sync

If you have an HA pair:

# Check sync status
tmsh show cm sync-status

# Force sync if needed
tmsh run cm config-sync to-group YOUR-DEVICE-GROUP

Certificates and profiles might not be synced between units.

Step 2: Check for Multiple Profiles

# List all profiles on the VS
tmsh list ltm virtual YOUR-VS profiles

Multiple Client SSL profiles can cause inconsistent behavior.

Step 3: Check Traffic Distribution

If you have multiple F5 units, verify certificate is installed on ALL units.

Essential Debug Commands

Quick Diagnostics

# Check virtual server status
tmsh show ltm virtual YOUR-VS

# Check profile assignment
tmsh list ltm virtual YOUR-VS profiles

# List certificates
tmsh list sys crypto cert

# Check specific certificate details
tmsh list sys crypto cert YOUR-CERT all-properties

# View profile configuration
tmsh list ltm profile client-ssl YOUR-PROFILE all-properties

SSL Logging

# Enable debug logging
tmsh modify sys db tmm.ssl.log level debug

# Watch SSL events
tail -f /var/log/ltm | grep -i ssl

# IMPORTANT: Disable when done (very verbose!)
tmsh modify sys db tmm.ssl.log level warning

Testing from F5

# Test outbound SSL (for Server SSL issues)
curl -vk https://BACKEND-SERVER:443

# Test certificate validity
tmsh run sys crypto check-cert cert name YOUR-CERT

Packet Capture

# Capture SSL traffic
tcpdump -i 0.0:nnn -nn -Xs0 -vv -w /var/tmp/ssl-capture.pcap host YOUR-VIP and port 443

# Analyze with ssldump
ssldump -nr /var/tmp/ssl-capture.pcap -H -S crypto > /var/tmp/ssl-analysis.txt

Common Error Messages Reference

Error MessageMeaningFix
"no shared cipher"No cipher overlap between client and serverExpand cipher list in profile
"certificate verify failed"Chain validation failureCheck chain or set Ignore
"unknown ca"Client doesn't trust your CAAdd chain certificate
"certificate has expired"Certificate past validity dateRenew certificate
"wrong version number"TLS version incompatibilityCheck Options in profile
"handshake failure"Generic - enable debug loggingCheck logs for specific cause
"sslv3 alert handshake failure"SSL/TLS negotiation failedUsually cipher or protocol issue
"connection reset by peer"Server rejected connectionCheck profile assignment, VS status

Troubleshooting Flowchart

START: SSL Not Working
│
├── Can you connect on port 443?
│   └── NO → Check VS status, IP, port, firewall
│
├── YES → Does SSL handshake start?
│   └── NO → Check Client SSL profile assigned to VS
│
├── YES → Does handshake complete?
│   └── NO → Enable debug logging, check ciphers/TLS versions
│
├── YES → Is certificate trusted?
│   └── NO → Check chain configuration
│
├── YES → Is it the correct certificate?
│   └── NO → Check profile assignment, SNI configuration
│
└── YES → Everything working!

Troubleshooting Checklist

  • Virtual server is enabled and available
  • Client SSL profile is assigned to virtual server
  • Certificate is not expired
  • Certificate key chain includes cert, key, AND chain
  • Chain certificate matches certificate's issuer
  • Cipher string allows common ciphers
  • TLS versions align with client requirements
  • For HA: configuration is synced to both units
  • Debug logging disabled after troubleshooting

Frequently Asked Questions

Related Resources