Zum Inhalt springen
ecdsa.com
.NET on Linux (SslStream over OpenSSL).NET

Fehlermeldung

SSL Handshake failed with OpenSSL error - SSL_ERROR_SSL.

Auch ausgegeben als

  • Interop+OpenSsl+SslException: SSL Handshake failed with OpenSSL error - SSL_ERROR_SSL.

Die umgebende Kette lautet „The SSL connection could not be established“ → „Authentication failed, see inner exception.“ → diese Meldung → der Grund von OpenSSL (zum Beispiel „error:0A000410:SSL routines::sslv3 alert handshake failure“ mit OpenSSL 3.0, „ssl/tls alert handshake failure“ mit 3.3+). Unter Windows (Schannel) und macOS (TLS-Stack von Apple) meldet .NET solche Fehler stattdessen mit plattformspezifischen Meldungen.

.NET on Linux (SslStream over OpenSSL) — inner exception carrying the OpenSSL reason

Was der Fehler bedeutet

Unter Linux läuft SslStream von .NET auf dem OpenSSL des Systems, und der Handshake ist innerhalb von OpenSSL mit SSL_ERROR_SSL fehlgeschlagen. Diese Zeile ist nur eine Hülle; die nächste innere Exception (Interop+Crypto+OpenSslCryptographicException) enthält den eigentlichen Grund von OpenSSL, etwa einen Alert vom Server oder eine abgelehnte Protokollversion.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Grund von OpenSSL in der innersten Exception lesen

    Der Fehlercode error:0A… und sein Text benennen das Problem; ordne ihn wie gezeigt zu.

    text
    Interop+Crypto+OpenSslCryptographicException: error:0A000410:SSL routines::sslv3 alert handshake failure
          -> the server rejected the offered suites/versions (or wants a client certificate)
    error:0A00042E:SSL routines::tlsv1 alert protocol version   -> the server only speaks TLS 1.0/1.1
    error:0A00018A:SSL routines::dh key too small              -> the server uses 1024-bit DH
  2. 2.

    Fähigkeiten von Server und Client vergleichen

    Liste die Cipher Suites des Servers und die lokalen OpenSSL-Standardwerte auf.

    bash
    nmap --script ssl-enum-ciphers -p 443 legacy.example.com     # what the server offers
    openssl ciphers -v 'DEFAULT' | head                            # what this system's OpenSSL offers
  3. 3.

    Server korrigieren, nicht die Richtlinie des Clients

    Modernisiere die TLS-Konfiguration des Servers; lockere die OpenSSL-Richtlinie des Clients nur als eng begrenzte, vorübergehende Ausnahme.

    text
    Server side: enable TLS 1.2/1.3 with ECDHE + AES-GCM (or ChaCha20) suites. Lowering the
    system-wide OpenSSL policy (CipherString=DEFAULT@SECLEVEL=1 in openssl.cnf) affects every
    application on the host and should only be a short-lived exception for an isolated legacy peer.

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen