2012-06-27 47 views
19

que 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.de error: C# La conexión subyacente se cerró: no se pudo establecer una relación de confianza para el/TLS canal seguro SSL

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()); 

Utilizando este código me sale este error:

The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.

¿Cuál es el problema?

+1

echar un vistazo a este post, mayb que puede ayudar u para http://stackoverflow.com/questions/703272/could-not-establish-trust-relationship-for-ssl-tls-secure- channel-soap – JohnnBlade

+0

Gracias Johnn Blade –

+0

Posible duplicado de [C# Ignorar errores de certificado?] (http://stackoverflow.com/questions/2675133/c-sharp-ignore-certificate-errors) –

Respuesta

45

He resuelto el problema con esto:

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

Esta solución podría ser potencial amenaza a la seguridad como usted están desactivando la validación del certificado SSL. Si se trata de un código de producción, comprenda el riesgo del servidor al que se está conectando. – Amzath

+0

¿Cómo se puede hacer esto en Windows Phone 8? ServicePointManager no está en la http://cmsresources.windowsphone.com/devcenter/en-us/downloads/064028-microsoft-poster.pdf referencia –

+1

El tema me pasó cuando canalizar las peticiones de mi aplicación a través violinista. Y agregar el truco del delegado para no validar el certificado me ayudó a ejecutar mi llamada con éxito, así como a ver la respuesta en Fiddler. –

-3

Este es el código de cliente, ¿verdad? Y está accediendo a una url HTTPS, ¿no es así? Creo que el problema es con 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 sin problemas o ve una advertencia sobre el desajuste del certificado?

+0

Sí, este es un código de cliente. Sí, estoy accediendo a través de https. Cuando me conecto en el navegador funciona sin problemas y no aparece ninguna advertencia .. –

+0

Si se siente cómodo con los analizadores de red (por ejemplo, Wireshark of NetMon), puede simplemente oler su tráfico y ver con qué host realmente habla, qué certificado lo hace presente y si el handshake TLS se completa con o sin errores. De lo contrario, el enlace que obtuvo como referencia es un buen comienzo. Si esto no le ayuda puede empezar a derramar aquí más y más detalles de la configuración (URL al que está accediendo, certificado instalado en el servidor, configuración de red - servidores proxy, etc.) – Kastorskij

0

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

me encontré con este error cuando el certificado raíz (hecha a) para una (auto firmado) certificado se había añadido a la raíz de CA de confianza para el usuario actual). Mover el certificado raíz a la tienda Root CA en la máquina local resolvió mi problema.

Cuestiones relacionadas