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.

¿Cómo puedo desactivar la verificación del certificado SSL en el cliente HTTP de .NET Core?

Estoy intentando conectarme a un sitio web a través de un proxy. Esto ocurre en un AWS Lambda con el SDK de .NET Core utilizando un cliente HTTP. La llamada se ve más o menos así:

handler = new HttpClientHandler()
{
    CookieContainer = cookieContainer,
    Proxy = new WebProxy(
        new Uri(Environment.GetEnvironmentVariable("proxyURL"))),
    ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator,
    SslProtocols = SslProtocols.Tls12,
    ClientCertificateOptions = ClientCertificateOption.Manual
};

using(var client = new HttpClient(handler))
{
    var content = await client.GetAsync("https://my-website.com/");
}

No puedo realizar la llamada a “https://my-website.com/”. La llamada se agota sin un mensaje de error.

Sin embargo, pude acceder al sitio web utilizando Golang y resty en un AWS Lambda, omitiendo la verificación del TLS:

client := resty.New()
resp, err := client.
    SetProxy(os.Getenv("proxyURL")).
    SetRetryCount(3).SetTimeout(3*time.Second).SetTLSClientConfig(&tls.Config{InsecureSkipVerify: true}).
    R().Get("https://my-website.com/")

Mi pregunta es: ¿cómo puedo lograr el mismo comportamiento de mi código en Golang en mi código de .NET Core?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para lograr el mismo comportamiento en tu código .NET Core como en tu código Golang, puedes intentar desactivar la validación TLS en el HttpClientHandler para tu SDK .NET Core. Esto se puede hacer agregando la siguiente línea:

    ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;

    Entonces, el código actualizado se vería así:

    handler = new HttpClientHandler()
    {
        CookieContainer = cookieContainer,
        Proxy = new WebProxy(
                    new Uri(Environment.GetEnvironmentVariable("proxyURL"))),
        ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator,
        SslProtocols = SslProtocols.Tls12,
        ClientCertificateOptions = ClientCertificateOption.Manual
    };
    
    ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
    
    using(var client = new HttpClient(handler))
    {
        var content = await client.GetAsync("https://my-website.com/");
    }
    

    Esto permitirá establecer la conexión SSL/TLS sin verificar el certificado del servidor, al igual que en tu código Golang. Sin embargo, ten en cuenta que este enfoque puede presentar riesgos de seguridad y se recomienda utilizar un certificado de confianza para tu sitio web y validarlo correctamente.

Comments are closed.