Aller au contenu
ecdsa.com
.NET SslStream / HttpClient.NET

Message d’erreur

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

Également affiché sous la forme

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

Même texte dans .NET Core, .NET 5–10 et .NET Framework. HttpClient l’enveloppe dans « The SSL connection could not be established, see inner exception. »

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

Ce que cela signifie

SslStream attendait un en-tête d’enregistrement TLS et a reçu des octets qui n’en forment pas un : il ne peut même pas déterminer la longueur de la trame suivante. L’autre partie ne parle pas TLS sur ce port : il s’agit généralement d’un point de terminaison HTTP en clair (« HTTP/1.1 400 … ») contacté en https://, ou d’un protocole qui commence en texte clair.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Vérifier le protocole que parle le port

    Si c’est du HTTP en clair qui répond, utilisez le port HTTPS ou http://.

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

    Utiliser l’URL HTTPS sur laquelle écoute Kestrel

    Vérifiez applicationUrl ou ASPNETCORE_URLS et appelez l’adresse https:// avec son port.

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

    Messagerie : les ports STARTTLS exigent STARTTLS

    Avec MailKit, utilisez SecureSocketOptions.StartTls sur le port 587 et SslOnConnect uniquement sur le port 465.

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

Erreurs associées

Parcourir toute la base de données des erreurs de signature