AuthenticateAsClient: System.IO.IOException: Reçu un EOF inattendu ou 0 octet du flux de transport

En raison de Heartbleednotre Serveur de Passerelle a été mise à jour et ce problème s'est présenté.

En raison de CANICHESSLv3 est plus pris en charge.

  • Remarque, le problème n'est présent que sur Win7+ boîtes; WinXP boîtes travail sans problème (même code, les différents OS = problème); accordée WinXP n'est plus valide OS, je voulais juste faire une remarque de fonctionnalité.

Application Client (par.NET 2.0) est assis sur un Windows 7 (ou 8) de la boîte. Le serveur s'exécute dans une DMZ derrière un Serveur de Passerelle. Juste pour remarque, j'ai constaté que ce problème n'est plus présent sur .NET 4.0+ - cependant en raison de l'héritage de code, je n'ai pas le luxe de la mise à jour.

Serveur de passerelle est un passage à travers la boîte sur laquelle le Serveur HTTP Apache avec SSL exécuter. Son emplacement est à l'extérieur de la zone démilitarisée, et il est utilisé pour accéder au Serveur qui est à l'intérieur de la zone démilitarisée. Les Versions de logiciel en cours d'exécution sur le serveur de Passerelle sont Apache/2.2.25 (Win32), mod_jk/1.2.39, mod_ssl/2.2.25, OpenSSL/1.0.1 g

Voici le code utilisé sur le Client de l'application (avec un montant exorbitant de l'exploitation forestière ajouté) ... remarque, 'serverName' contient généralement une valeur telle que "https://some.url.com"

private bool ConnectAndAuthenicate(string serverName, out TcpClient client, out SslStream sslStream)
{
    client = null;
    sslStream = null;
    try
    {
        client = new TcpClient(serverName, 443); //Create a TCP/IP client; ctor attempts connection
        Log("ConnectAndAuthenicate: Client CONNECTED"));

        sslStream = new SslStream(client.GetStream(), false, ValidateServerCertificate, null);
        Log("ConnectAndAuthenicate: SSL Stream CREATED"));
    }
    catch (Exception x)
    {
        Log("ConnectAndAuthenicate: EXCEPTION >> CONNECTING to server: {0}", x.ToString()));

        if (x is SocketException)
        {
            SocketException s = x as SocketException;
            Log("ConnectAndAuthenicate: EXCEPTION >> CONNECTING to server: Socket.ErrorCode: {0}", s.ErrorCode));
        }
        if (client != null) { client.Close(); client = null; }
        if (sslStream != null) { sslStream.Close(); sslStream = null; }
    }

    if (sslStream == null) return false;

    try
    {
        sslStream.ReadTimeout = 10000; //wait 10 seconds for a response ...
        Log("ConnectAndAuthenicate: AuthenticateAsClient CALLED ({0})", serverName));
        sslStream.AuthenticateAsClient(serverName);
        Log("ConnectAndAuthenicate: AuthenticateAsClient COMPLETED SUCCESSFULLY"));
        return true;
    }
    catch (Exception x)
    {
        Log("ConnectAndAuthenicate: EXCEPTION >> AuthenticateAsClient: {0}", x.ToString()));
        client.Close(); client = null;
        sslStream.Close(); sslStream = null;
    }
    return false;
}

Note - réponses postées relatives à ServicePointManager n'ont absolument aucun effet sur le résultat de cette application.

Chaque fois que AuthenicateAsClient() est appelée lorsque l'application est exécutée sur Win 7+ boîte, l'exception se produit - si l'application est exécutée sur WinXP boîte, le code fonctionne correctement, sans exceptions.

Des idées pour les solutions sont les bienvenues.

source d'informationauteur Bret