Fehlermeldung
SSL routines:tls_setup_handshake:no protocols available
Auch ausgegeben als
- error:0A0000BF:SSL routines::no protocols available
Das CLI openssl (3.0 und 3.5) gibt „error:0A0000BF:SSL routines:tls_setup_handshake:no protocols available“ aus; Anwendungen, die Fehler ohne Funktionsnamen formatieren, zeigen „error:0A0000BF:SSL routines::no protocols available“.
OpenSSL (client or server side) — SSL_R_NO_PROTOCOLS_AVAILABLE before the handshake starts
Was der Fehler bedeutet
OpenSSL hat sich geweigert, den Handshake überhaupt zu beginnen, weil nach Anwendung aller Einschränkungen keine Protokollversion übrig bleibt, die es anbieten könnte. Typischerweise hat die Anwendung TLS 1.0 oder 1.1 verlangt, während das Sicherheitsniveau von OpenSSL (auf aktuellen Distributionen standardmäßig 2) diese verbietet, oder die konfigurierte Mindestversion liegt über der Höchstversion. An den Server wurde nichts gesendet.
Warum der Fehler auftritt
TLS 1.0/1.1 erzwungen, obwohl das Sicherheitsniveau sie verbietet
häufigSeit OpenSSL 3.0 sind TLS 1.0 und 1.1 ab Sicherheitsniveau 1 deaktiviert; Distributionen setzen standardmäßig Niveau 2. Ein Client, der für ein altes Gerät fest auf TLS 1.0 eingestellt ist, hat deshalb nichts anzubieten.
Mindestversion über der Höchstversion
gelegentlichKonfigurationen, die ein Minimum von TLS 1.3 mit einem Maximum von TLS 1.2 kombinieren (oft durch zwei verschiedene Einstellungen, die sich überlagern), lassen einen leeren Bereich übrig.
Eine systemweite Krypto-Richtlinie übersteuert die Anwendung
gelegentlichDie Krypto-Richtlinien von RHEL und Fedora (DEFAULT, FUTURE) und die openssl.cnf von Debian legen MinProtocol und das Sicherheitsniveau für jede OpenSSL-Anwendung auf dem Rechner fest.
So behebst du den Fehler
- 1.
Einschränkende Einstellung finden
Sieh in openssl.cnf und in der Krypto-Richtlinie des Systems nach, welche Werte MinProtocol, MaxProtocol und @SECLEVEL in CipherString haben.
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.
Altes Gerät: Niveau für einen einzelnen Befehl senken
Mit @SECLEVEL=0 im Cipher-String ist TLS 1.0/1.1 nur für diesen Aufruf wieder aktiviert. Halte solche Ausnahmen aus der systemweiten Konfiguration und aus nicht vertrauenswürdigen Netzwerken heraus.
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.
Konsistenten Versionsbereich verwenden
Stelle sicher, dass das Minimum nicht über dem Maximum liegt; TLS 1.2 bis TLS 1.3 ist heute der übliche Bereich.
ini # openssl.cnf (system_default_sect): a consistent range MinProtocol = TLSv1.2 MaxProtocol = TLSv1.3