Pular para o conteúdo
ecdsa.com
.NET on Linux (SslStream over OpenSSL).NET

Mensagem de erro

SSL Handshake failed with OpenSSL error - SSL_ERROR_SSL.

Também aparece como

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

A cadeia de exceções em volta é “The SSL connection could not be established” → “Authentication failed, see inner exception.” → esta mensagem → o motivo do OpenSSL (por exemplo, “error:0A000410:SSL routines::sslv3 alert handshake failure” com o OpenSSL 3.0, “ssl/tls alert handshake failure” com o 3.3+). No Windows (Schannel) e no macOS (pilha TLS da Apple), o .NET informa essas falhas com mensagens próprias de cada plataforma.

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

O que significa

No Linux, o SslStream do .NET roda sobre o OpenSSL do sistema, e o handshake falhou dentro do OpenSSL com SSL_ERROR_SSL. Esta linha é só um invólucro; a próxima exceção interna (Interop+Crypto+OpenSslCryptographicException) traz o motivo real do OpenSSL, como um alerta do servidor ou uma versão do protocolo recusada.

Por que acontece

Como corrigir

  1. 1.

    Ler o motivo do OpenSSL na exceção mais interna

    O código error:0A… e o texto identificam o problema; faça a correspondência com a causa como mostrado.

    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 os recursos do servidor e do cliente

    Enumere as cipher suites do servidor e os padrões do 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.

    Corrigir o servidor, não a política do cliente

    Modernize a configuração TLS do servidor; afrouxe a política do OpenSSL do cliente apenas como exceção pontual e temporária.

    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.

Erros relacionados

Ver toda a base de erros de assinatura