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

Mensagem de erro

Cannot determine the frame size or a corrupted frame was received.

Também aparece como

  • System.Security.Authentication.AuthenticationException: Cannot determine the frame size or a corrupted frame was received.

O mesmo texto no .NET Core, no .NET 5–10 e no .NET Framework. O HttpClient o encapsula em “The SSL connection could not be established, see inner exception.”

.NET SslStream / HttpClient — AuthenticationException when the peer's reply is not a TLS record

O que significa

O SslStream esperava um cabeçalho de registro TLS e recebeu bytes que não formam um, por isso não consegue nem saber o tamanho do próximo quadro. O outro lado não está falando TLS nessa porta — normalmente é um endpoint de HTTP não criptografado (“HTTP/1.1 400 …”) acessado com https://, ou um protocolo que começa em texto claro.

Por que acontece

Como corrigir

  1. 1.

    Verificar qual protocolo a porta fala

    Se a porta responder com HTTP não criptografado, use a porta HTTPS ou http://.

    bash
    curl -si http://api.example.com:8080/ | head -1    # answers over plain HTTP?
  2. 2.

    Usar a URL HTTPS em que o Kestrel escuta

    Verifique o applicationUrl ou o ASPNETCORE_URLS e chame o endereço https:// com a porta dele.

    json
    {
      "profiles": {
        "https": {
          "commandName": "Project",
          "applicationUrl": "https://localhost:7001;http://localhost:5001"
        }
      }
    }
  3. 3.

    E-mail: portas STARTTLS exigem STARTTLS

    Com o MailKit, use SecureSocketOptions.StartTls na porta 587 e SslOnConnect apenas na 465.

    csharp
    // MailKit: STARTTLS on 587, implicit TLS (SslOnConnect) on 465
    await smtp.ConnectAsync("mail.example.com", 587, MailKit.Security.SecureSocketOptions.StartTls);

Erros relacionados

Ver toda a base de erros de assinatura