Zum Inhalt springen
ecdsa.com
.NET SslStream / HttpClient.NET

Fehlermeldung

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

Auch ausgegeben als

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

Derselbe Text in .NET Core, .NET 5–10 und .NET Framework. HttpClient verpackt den Fehler in „The SSL connection could not be established, see inner exception.“

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

Was der Fehler bedeutet

SslStream hat den Header eines TLS-Records erwartet und Bytes bekommen, die keinen solchen Header bilden, deshalb kann es nicht einmal feststellen, wie lang der nächste Frame ist. Die Gegenstelle spricht auf diesem Port kein TLS – typischerweise ein Endpunkt mit reinem HTTP („HTTP/1.1 400 …“), der über https:// angesprochen wird, oder ein Protokoll, das im Klartext beginnt.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Prüfen, welches Protokoll der Port spricht

    Antwortet reines HTTP, verwende den HTTPS-Port oder http://.

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

    HTTPS-URL verwenden, auf der Kestrel lauscht

    Prüfe applicationUrl oder ASPNETCORE_URLS und rufe die https://-Adresse mit ihrem Port auf.

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

    E-Mail: STARTTLS-Ports brauchen STARTTLS

    Verwende mit MailKit SecureSocketOptions.StartTls auf Port 587 und SslOnConnect nur auf Port 465.

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

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen