Saltar al contenido

“El certificado remoto no es válido según el procedimiento de validación” usando HttpClient

Lucas, miembro de nuestro equipo, nos hizo el favor de escribir este tutorial ya que conoce a la perfección dicho tema.

Solución:

El problema que está experimentando se debe a que el CN ​​del sujeto presentado por el certificado no coincide con el nombre de host en el Uri.

Asegúrese de que el certificado vinculado a la dirección IP pública del host tenga un CN coincidente con el nombre de host que está utilizando para acceder al recurso.

Para verificar fácilmente, abra la URL en un navegador y vea el certificado. los emitido a El campo debe contener un FQDN y coincidir con la parte del nombre de host en el Uri. En tu caso, no.

Inserte este fragmento de código en el cuerpo del procedimiento:

static void Main(string[] args)   

     ServicePointManager.ServerCertificateValidationCallback =
                delegate (object sender, X509Certificate certificate, X509Chain 
     chain, SslPolicyErrors sslPolicyErrors)
                
                    return true;
                ;
     ....

Desafortunadamente, la respuesta de @Qosai no fue suficiente para mí, al menos en un cliente SignalR 3.1, ya que la parte websocket también valida los certificados SSL. ClientCertificateOptions también debe establecerse en Manual.

Encontré una publicación de un colaborador de SignalR que me puso a trabajar:

_connection = new HubConnectionBuilder()
            .WithUrl(new Uri(hub_uri), options => 
                options
                    .Cookies
                    .Add(http_helper.loginCookie);

                var handler = new HttpClientHandler
                
                    ClientCertificateOptions = ClientCertificateOption.Manual,
                    ServerCertificateCustomValidationCallback = (httpRequestMessage, cert, cetChain, policyErrors) => true
                ;
                options.HttpMessageHandlerFactory = _ => handler;
                options.WebSocketConfiguration = sockets =>
                
                    sockets.RemoteCertificateValidationCallback = (sender, certificate, chain, policyErrors) => true;
                ;
            )
            .Build();

PD: si aún tiene problemas, consulte este artículo sobre cómo habilitar el inicio de sesión correctamente. Para mi caso fue un poco complicado porque xUnit no muestra la salida de la consola. Por lo tanto, habilité el registro de depuración en un archivo (no en el fragmento)

Sección de Reseñas y Valoraciones

Tienes la posibilidad dar visibilidad a esta noticia si te valió la pena.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *