Saltar al contenido
ecdsa.com
.NET on Linux (SslStream over OpenSSL).NET

Mensaje de error

SSL Handshake failed with OpenSSL error - SSL_ERROR_SSL.

También se muestra como

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

La cadena de excepciones que la rodea dice «The SSL connection could not be established» → «Authentication failed, see inner exception.» → este mensaje → el motivo de OpenSSL (por ejemplo, «error:0A000410:SSL routines::sslv3 alert handshake failure» con OpenSSL 3.0, «ssl/tls alert handshake failure» con 3.3+). En Windows (Schannel) y macOS (la pila TLS de Apple), .NET notifica estos fallos con mensajes propios de cada plataforma.

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

Qué significa

En Linux, el SslStream de .NET funciona sobre el OpenSSL del sistema, y el handshake falló dentro de OpenSSL con SSL_ERROR_SSL. Esta línea es solo un envoltorio; la siguiente excepción interna (Interop+Crypto+OpenSslCryptographicException) contiene el motivo real de OpenSSL, como una alerta del servidor o una versión del protocolo rechazada.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Leer el motivo de OpenSSL en la excepción más interna

    El código error:0A… y su texto identifican el problema; interprétalo como se muestra.

    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.

    Comparar las capacidades del servidor y del cliente

    Enumera los conjuntos de cifrado del servidor y los valores predeterminados del OpenSSL local.

    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.

    Corregir el servidor, no la política del cliente

    Moderniza la configuración TLS del servidor; relaja la política de OpenSSL del cliente solo como una excepción acotada y temporal.

    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.

Errores relacionados

Explorar toda la base de datos de errores de firma