Skip to content
ecdsa.com
OpenSSL (client or server side)OpenSSL CLI

Error message

SSL routines:tls_setup_handshake:no protocols available

Also printed as

  • error:0A0000BF:SSL routines::no protocols available

The openssl CLI (3.0 and 3.5) prints "error:0A0000BF:SSL routines:tls_setup_handshake:no protocols available"; applications that format errors without the function name show "error:0A0000BF:SSL routines::no protocols available".

OpenSSL (client or server side) — SSL_R_NO_PROTOCOLS_AVAILABLE before the handshake starts

What it means

OpenSSL refused to even start the handshake because, after applying all restrictions, no protocol version is left to offer. Typically the application asked for TLS 1.0 or 1.1 while OpenSSL's security level (2 by default on current distributions) forbids them, or the configured minimum version is above the maximum. Nothing was sent to the server.

Why it happens

How to fix it

  1. 1.

    Find the restricting setting

    Look at openssl.cnf and the system crypto policy for MinProtocol, MaxProtocol and CipherString @SECLEVEL values.

    bash
    openssl version -d                                  # where openssl.cnf lives
    grep -nE 'MinProtocol|MaxProtocol|CipherString' /usr/lib/ssl/openssl.cnf /etc/ssl/openssl.cnf 2>/dev/null
    update-crypto-policies --show 2>/dev/null           # RHEL/Fedora system policy
  2. 2.

    Legacy device: lower the level for one command

    Adding @SECLEVEL=0 to the cipher string re-enables TLS 1.0/1.1 for that invocation only. Keep such exceptions out of system-wide configuration and off untrusted networks.

    bash
    # For a one-off test against a legacy device: lower the security level for this command only
    echo | openssl s_client -connect legacy.example.com:443 -tls1 -cipher 'DEFAULT:@SECLEVEL=0'
  3. 3.

    Use a consistent version range

    Make sure the minimum does not exceed the maximum; TLS 1.2 to TLS 1.3 is the usual range today.

    ini
    # openssl.cnf (system_default_sect): a consistent range
    MinProtocol = TLSv1.2
    MaxProtocol = TLSv1.3

Related errors

Browse the full signature error database