Troubleshooting

Fixing "SSL Handshake Failure" Reported by OpenSSL Directly

When testing a connection directly with openssl s_client and the handshake fails, OpenSSL typically reports a specific alert type in its output — reading it gives you a much more targeted starting point than the more generic errors browsers tend to surface.

1 Client sends ClientHello Proposing supported TLS versions and cipher suites 2 Server checks for any mutually supported combination Comparing its own configuration against what the clientoffered 3 No overlap found Neither side is necessarily misconfigured in isolation — theysimply don't share anything in common 4 Server sends a handshake_failure alert The connection ends before any application data is everexchanged
Where a Handshake Failure Actually Occurs

Common alerts and what they mean

Running the same command with a specific TLS version flag (-tls1_2, for example) helps further isolate whether the issue is protocol-version-specific or more fundamental to the certificate configuration itself.

What OpenSSL's specific handshake failure output typically reveals

OpenSSL's s_client output at the point of a handshake failure typically shows exactly which stage failed, cipher negotiation, certificate exchange, key exchange, giving more diagnostic detail than a browser's generic error message alone would provide.

How to use this specific error as a starting point for the broader diagnostic playbook

A specific handshake failure identified through OpenSSL is exactly the kind of starting point our comprehensive OpenSSL diagnostic playbook is designed to build on — following that guide's systematic sequence from this specific failure point typically leads to a complete, confident diagnosis.

What the specific alert code in OpenSSL's output tells you about the failure's exact cause

TLS alert codes returned during a failed handshake (like handshake_failure, protocol_version, or insufficient_security) each correspond to a specific, documented reason for the failure — looking up the specific alert code shown in your OpenSSL output against TLS alert code documentation narrows down the exact cause markedly faster than generic troubleshooting.

How to compare a failing handshake against a known-working one for the same server

If the same server sometimes succeeds and sometimes fails, capturing OpenSSL's verbose output from both a successful and a failing attempt and comparing them side by side often reveals exactly which specific negotiation step differs between the two outcomes.

What the exact OpenSSL output looks like at the point of a typical handshake failure

OpenSSL's s_client output at a handshake failure point typically shows a specific TLS alert message just before the connection terminates, along with a verify return code — reading both together, rather than just noting that a failure occurred, usually identifies the specific stage and reason for the failure outright.

How to build a systematic testing sequence covering every stage of the handshake

Testing protocol version support, then cipher suite support, then certificate chain validity, then revocation status in sequence, using the individual techniques covered throughout our OpenSSL diagnostic playbook, builds a complete picture of exactly where in the handshake process a failure is actually occurring.

What role automated testing plays in catching a handshake regression before deployment

Incorporating a basic OpenSSL handshake test into your deployment pipeline, failing the deployment if a genuine handshake failure is detected, catches a configuration regression automatically before it ever reaches production, rather than relying solely on manual, post-deployment verification.

Try our OpenSSL Trace — See the byte-level TLS handshake trace for a live server.

Comments

Loading comments…