c# - tls - the requested security protocol is not supported
Cómo especificar el protocolo SSL a usar para la clase de WebClient (1)
Tengo una aplicación que envía datos a un servidor utilizando un POST HTTPS. Yo uso un objeto System.Net.WebClient para hacer esto. Aquí hay 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 una URI que comienza con https: //
Esto ha estado funcionando muy bien durante mucho tiempo. Hoy, comenzamos a recibir el siguiente error de conexión: "La conexión subyacente se cerró: se produjo un error inesperado en un envío". Hicimos algunos problemas con el propietario del servidor, y finalmente lo redujeron a lo siguiente. Hicieron un cambio en su servidor para bloquear TLS 1.0 y dijeron que ahora debemos enviar nuestros datos utilizando TLS 1.1 o 1.2.
¿Qué necesito configurar en mi objeto WebClient (o en otra parte de mi función) para que use TLS 1.1 o 1.2 en lugar de TLS 1.0?
Estamos utilizando .NET Framework 4.5 si eso marca la diferencia.
A partir de las otras preguntas sugeridas, pude resolverlo agregando la siguiente línea a mi código:
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
Esto deshabilitó TLS 1.0 del cliente y luego el servidor aceptó la conexión.
Espero que esto ayude a alguien más con el mismo problema. Aunque la respuesta es similar a esas otras preguntas, no fue obvio de las preguntas que se hicieron que este fue el caso, por lo que no siento que sea un duplicado.