Tengo una aplicación que envía los datos a un servidor mediante un HTTPS POST. Yo uso un Sistema.Net.Objeto WebClient para ello. Aquí es una función que envía algunos datos:

    private byte[] PostNameValuePairs(string uri, NameValueCollection pairs)
    {
        byte[] response;
        String responsestring = "";
        using (WebClient client = new WebClient())
        {
            client.Headers = GetAuthenticationHeader();

            string DataSent = GetNameValueCollectionValuesString(pairs);

            try
            {
                response = client.UploadValues(uri, pairs);
                responsestring = Encoding.ASCII.GetString(response);
            }
            catch (Exception e)
            {
                responsestring = "CONNECTION ERROR: " + e.Message;
                return Encoding.ASCII.GetBytes(responsestring);
            }
            finally
            {
                _communicationLogger.LogCommunication(uri, client.Headers.ToString(), DataSent, responsestring);
            }
        }

        return response;
    }

Estamos pasando un URI que comienza con https://

Este ha sido un gran trabajo por un largo tiempo. Hoy en día, empezamos a tener la conexión siguiente error: «se ha terminado La conexión: se produjo Un error inesperado en «enviar». Hicimos un poco de solución de problemas con el propietario del servidor, y que finalmente se redujo a la siguiente. Se hizo un cambio en su servidor para bloquear TLS 1.0, y dijo que ahora tenemos que enviar nuestros datos mediante TLS 1.1 o 1.2.

¿Qué debo poner en mi objeto WebClient (o en otro lugar en mi función) para hacer uso de TLS 1.1 o 1.2 en lugar de TLS 1.0?

Que estamos utilizando .NET Framework 4.5 en caso de que hace una diferencia.

  • mientras que la respuesta podría ser el mismo que esta pregunta, no está claro que es un duplicado. No hay ninguna mención de WebClient a todos en ese otro Q&A, para explicar cómo estas clases están relacionadas con que podría ser útil, y el autor de la pregunta y los demás lectores también podría estar interesado en las posibles soluciones para la configuración de este en cada instancia de base, por ejemplo.
  • Dependiendo de la plataforma que está utilizando, usted podría estar interesado en esta otra pregunta demasiado.
  • seguro, pero que también ha sido contestado antes. No pude encontrar uno adecuado, sin embargo, y la víctima que he seleccionado lo explica todo bastante bien. Este reabrió la pregunta ahora es propenso a «usar System.Net.ServicePointManager.SecurityProtocol» respuestas sin ninguna explicación adecuada en ellos, como ya hay cientos de. Y de acuerdo a la Establecer el SecurityProtocol (Ssl3 o TLS) en el .net HttpWebRequest por solicitud, no se puede establecer por la petición. WebClient utiliza HttpWebRequest internamente de todos modos.
  • No ser capaz de establecer el SecurityProtocol por la petición es definitivamente un posible problema, especialmente si se está conectando a servidores diferentes – hay una discusión de que aquí, junto con el código de explicar cómo hemos llegado a su alrededor: stackoverflow.com/questions/26160118/…
InformationsquelleAutor JoeMjr2 | 2015-05-27

1 Comentario

  1. 66

    Desde el sugerido otras preguntas, yo era capaz de resolver agregando la línea siguiente a mi código:

    System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

    Esta deshabilitado TLS 1.0 desde el cliente y, a continuación, el servidor acepta la conexión.

    Espero que esto ayude a alguien con el mismo problema. Aunque la respuesta es similar a las otras preguntas, que no era evidente a partir de las preguntas que este era el caso, entonces no siento que este es un duplicado.

Dejar respuesta

Please enter your comment!
Please enter your name here