Estoy haciendo una httpwebrequest utilizando un archivo de certificación de autoridad raíz pública X509. Solo tengo la clave pública, no la privada. Todo funciona bien desde una aplicación de consola pero no funciona desde una aplicación asp.net. Me aparece el error: "La conexión subyacente se cerró: no se pudo establecer una relación de confianza para el canal seguro SSL/TLS".ASP.NET y La conexión subyacente se cerró: No se pudo establecer una relación de confianza para el canal seguro SSL/TLS
La opción para desactivar Validación no es una opción.
Este es el código
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("https://xxxxxxx/gateway.aspx");
string post = "abcdef";
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "POST";
req.ContentLength = post.Length;
var cert = System.Security.Cryptography.X509Certificates.X509Certificate.CreateFromCertFile(@"c:\temp\root.cer");
req.ClientCertificates.Add(cert);
StreamWriter stOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII);
stOut.Write(post.ToString());
stOut.Close();
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Aquí está el Sistema de Registros de System.Net y System.Net sockets.
System.Net Información: 0: [5928] SecureChannel # 8106798 - No se pudo crear una cadena de certificados en una autoridad raíz de confianza.
System.Net Información: 0: [5928] SecureChannel # 8106798 - El certificado remoto fue verificado como no válido por el usuario.
System.Net.Sockets detallado: 0: [5928] Socket # 7486778 :: Dispose()
System.Net Error: 0: [5928] Excepción en el HttpWebRequest # 51319244 :: - la conexión subyacente se cerró: no se pudo establecer una relación de confianza para el canal seguro SSL/TLS.
Error de System.Net: 0: [5928] Excepción en HttpWebRequest # 51319244 :: EndGetRequestStream - La conexión subyacente se cerró: No se pudo establecer una relación de confianza para el canal seguro SSL/TLS.
Más información
Si utilizo este código (de CodeGuru)
public static bool ValidateServerCertificate(object sender,
X509Certificate certificate, X509Chain chain,
SslPolicyErrors sslPolicyErrors)
{
if (sslPolicyErrors ==
SslPolicyErrors.RemoteCertificateChainErrors) {
return false;
} else if (sslPolicyErrors ==
SslPolicyErrors.RemoteCertificateNameMismatch) {
System.Security.Policy.Zone z =
System.Security.Policy.Zone.CreateFromUrl
(((HttpWebRequest)sender).RequestUri.ToString());
if (z.SecurityZone ==
System.Security.SecurityZone.Intranet ||
z.SecurityZone ==
System.Security.SecurityZone.MyComputer) {
return true;
}
return false;
}
return true;
}
en última instancia, me sale el error:
Remote Certificate Chain Error
El root.cer se ha añadido a la tienda LocalMachine mediante el complemento MMC en. También intenté usar winhttpcertcfg.exe en vano. Como no tengo una clave privada, tampoco tengo un archivo PFX. ¿Pensamientos? –
El entorno de prueba no usa SSL, así que está bien. Estaba planeando utilizar la certificación Root de la CA, pero eso puede ser parte del problema. Supongo que la configuración de SSL en el extremo del servidor es un poco dudosa. –