Pular para o conteúdo
ecdsa.com
.NET HttpClient.NET

Mensagem de erro

The SSL connection could not be established, see inner exception.

Também aparece como

  • System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception.

O texto é o mesmo do .NET Core 3.x ao .NET 10. Frameworks (Refit, gRPC, SDKs do Azure) podem encapsulá-lo mais uma vez, então a exceção interna pode estar dois ou três níveis abaixo.

.NET HttpClient — HttpRequestException wrapping the AuthenticationException or IOException of the TLS handshake

O que significa

É o invólucro genérico do HttpClient para qualquer falha de TLS durante a conexão. A mensagem em si não traz diagnóstico: o motivo real está em InnerException (uma AuthenticationException que indica o problema do certificado, ou uma IOException do transporte). Registrar no log apenas e.Message esconde esse motivo; registre a cadeia de exceções inteira.

Por que acontece

Como corrigir

  1. 1.

    Registrar no log a cadeia de exceções completa

    Percorra InnerException (ou registre no log o objeto da exceção, não só Message) para ver a causa real.

    csharp
    catch (HttpRequestException e)
    {
        for (Exception? ex = e; ex != null; ex = ex.InnerException)
            logger.LogError("{Type}: {Message}", ex.GetType().FullName, ex.Message);
    }
  2. 2.

    Associar a mensagem interna à causa dela

    Cada mensagem interna aponta para uma correção diferente; as entradas relacionadas abaixo tratam delas uma a uma.

    text
    Inner exception                                                       -> look at
    "...errors in the certificate chain: UntrustedRoot / PartialChain"    -> trust store, server chain
    "...errors in the certificate chain: NotTimeValid"                    -> dates, clock
    "...validation procedure: RemoteCertificateNameMismatch"              -> host name vs SAN
    "Cannot determine the frame size or a corrupted frame was received."  -> port is not TLS
    "Received an unexpected EOF or 0 bytes from the transport stream."    -> server/proxy closed
    "SSL Handshake failed with OpenSSL error - SSL_ERROR_SSL."            -> protocol/cipher (Linux)

Erros relacionados

Ver toda a base de erros de assinatura