una tls terminado solicitud seguro relación puede pudo para net establecer crear confianza conexión con canal autoridad anulada c# ssl httpwebrequest certificate put

terminado - Error: C#La conexión subyacente se cerró: No se pudo establecer una relación de confianza para el canal seguro SSL/TLS



c# system net webexception anulada la solicitud no se puede crear un canal seguro ssl tls (3)

Estoy tratando de hacer una solicitud a través de SSL. El certificado ya está instalado en la máquina y funciona a través del navegador.

Estoy usando esta solicitud:

System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding(); byte[] data = encoding.GetBytes(request.Content.OuterXml.ToString()); string password = "XXXX"; X509Certificate2 cert = new X509Certificate2("c://zzzz.p12", password); string key = cert.GetPublicKeyString(); string certData = Encoding.ASCII.GetString(cert.Export(X509ContentType.Cert)); Uri uri = new Uri(request.Url); HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(uri); myRequest.Credentials = new NetworkCredential(request.User, request.Password.ToString()); myRequest.Method = "PUT"; myRequest.ContentType = request.ContentType; myRequest.ContentLength = data.Length; myRequest.ClientCertificates.Add(cert); Stream newStream = myRequest.GetRequestStream(); newStream.Write(data, 0, data.Length); newStream.Close(); System.IO.StreamReader st = new StreamReader(((HttpWebResponse)myRequest.GetResponse()).GetResponseStream());

Usando este código me sale este error:

La conexión subyacente se cerró: No se pudo establecer una relación de confianza para el canal seguro SSL / TLS. ---> System.Security.Authentication.AuthenticationException: El certificado remoto no es válido de acuerdo con el procedimiento de validación.

¿Cuál es el problema?


Asegúrese de que su certificado es de confianza adecuada. ¿Se ha agregado el certificado raíz al almacén de certificados correcto (CA raíz de confianza en la máquina local)?

Encontré este error cuando el certificado raíz (hecho propio) para un certificado (autofirmado) se había agregado a las CA raíz de confianza para el usuario actual). Trasladar el certificado raíz a la tienda de CA raíz en la máquina local se resolvió mi problema.


Este es el código del cliente, ¿verdad? Y estás accediendo a una URL HTTPS, ¿verdad? Creo que el problema está en el certificado del servidor, que la pila TLS del lado del cliente no puede validar. Cuando se conecta a esa URL a través del navegador, ¿funciona correctamente o ve una advertencia sobre la falta de coincidencia del certificado?


Resolví el problema con esto:

ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback ( delegate { return true; } );