es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Solicitud web HTTP con TLS 1.3 en C# .NET Core 3.1 excepción “El cliente y el servidor no pueden comunicarse porque no tienen un algoritmo común.”

Al intentar una solicitud web a un sitio que requiere TLS 1.3 https://shop.claytonengineering.com/, estoy recibiendo la siguiente excepción en “request.GetResponse();”.

Excepción: No se pudo establecer la conexión SSL, consulte la excepción interna.
Excepción interna: El cliente y el servidor no pueden comunicarse porque no poseen un algoritmo común.

Desde las herramientas de desarrollador de Google Chrome, en la pestaña de Seguridad – “La conexión a este sitio está encriptada y autenticada utilizando TLS 1.3, X25519 y AES128GCM”.

¿Alguna idea de cómo hacer que esta solicitud funcione?

HttpWebResponse response = null;

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://shop.claytonengineering.com/");

request.KeepAlive = true;
request.Headers.Add("Upgrade-Insecure-Requests", @"1");
request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36";
request.Headers.Add("Sec-Fetch-Mode", @"navigate");
request.Headers.Add("Sec-Fetch-User", @"?1");
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3";
request.Headers.Add("Sec-Fetch-Site", @"same-origin");

request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br");
request.Headers.Set(HttpRequestHeader.AcceptLanguage, "en-US,en;q=0.9");

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls13;

response = (HttpWebResponse)request.GetResponse();

string html = null;

using (StreamReader stream = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
    html = stream.ReadToEnd();
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para hacer que la solicitud funcione, puedes intentar establecer ServicePointManager.SecurityProtocol en SecurityProtocolType.Tls13 antes de hacer la solicitud. Esto asegurará que la solicitud se realice utilizando TLS 1.3, lo cual es requerido por el sitio.

    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls13;
    
    response = (HttpWebResponse)request.GetResponse();
    

Comments are closed.