This site is an archive and is no longer updated.
    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
    LinkedInX
    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