Saltar al contenido
ecdsa.com
.NET SslStream / HttpClient.NET

Mensaje de error

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

También se muestra como

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

El mismo texto en .NET Core, .NET 5–10 y .NET Framework. HttpClient lo envuelve en «The SSL connection could not be established, see inner exception.»

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

Qué significa

SslStream esperaba el encabezado de un registro TLS y recibió bytes que no lo forman, así que ni siquiera puede saber cuánto mide la siguiente trama. El otro extremo no habla TLS en ese puerto: normalmente es un endpoint HTTP sin cifrar («HTTP/1.1 400 …») al que se accede con https://, o un protocolo que empieza en texto sin cifrar.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Comprobar qué protocolo habla el puerto

    Si responde HTTP sin cifrar, usa el puerto HTTPS o http://.

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

    Usar la URL HTTPS en la que escucha Kestrel

    Comprueba applicationUrl o ASPNETCORE_URLS y llama a la dirección https:// con su puerto.

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

    Correo: los puertos STARTTLS requieren STARTTLS

    Con MailKit, usa SecureSocketOptions.StartTls en el 587 y SslOnConnect solo en el 465.

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

Errores relacionados

Explorar toda la base de datos de errores de firma