Estamos configurando un nuevo SharePoint para el que aún no tenemos un certificado SSL válido. Me gustaría llamar al servicio web Lists para recuperar algunos metadatos sobre la configuración. Sin embargo, cuando intento hacer esto, obtengo la excepción:
Se cerró la conexión subyacente: no se pudo establecer una relación de confianza para el canal seguro SSL / TLS.
La excepción anidada contiene el mensaje de error:
El certificado remoto no es válido según el procedimiento de validación.
Esto es correcto ya que estamos usando un certificado temporal.
Mi pregunta es: ¿cómo puedo decirle al cliente de servicio web .Net ( SoapHttpClientProtocol ) que ignore estos errores?
fuente
Alternativamente, puede registrar un delegado de devolución de llamada que ignora el error de certificación:
... ServicePointManager.ServerCertificateValidationCallback = MyCertHandler; ... static bool MyCertHandler(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors error) { // Ignore errors return true; }
fuente
Como la respuesta de Jason S:
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
Pongo esto en mi Main y miro
app.config
y pruebo si(ConfigurationManager.AppSettings["IgnoreSSLCertificates"] == "True")
antes de llamar a esa línea de código.fuente
Lo resolví de esta manera:
Llame a lo siguiente justo antes de llamar a su servicio web ssl que causa ese error:
using System.Net; using System.Net.Security; using System.Security.Cryptography.X509Certificates; /// <summary> /// solution for exception /// System.Net.WebException: /// 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. /// </summary> public static void BypassCertificateError() { ServicePointManager.ServerCertificateValidationCallback += delegate( Object sender1, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; }; }
fuente
Estaba teniendo el mismo error al usar DownloadString; y pude hacer que funcione como se muestra a continuación con sugerencias en esta página
System.Net.WebClient client = new System.Net.WebClient(); ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; string sHttpResonse = client.DownloadString(sUrl);
fuente
ServicePointManager.ServerCertificateValidationCallback += (mender, certificate, chain, sslPolicyErrors) => true;
omitirá invaild ssl. Escríbalo a su constructor de servicios web.
fuente
Para los novatos, puede extender su clase de servicio parcial en un archivo cs separado y agregar el código proporcionado por "imanabidi" para integrarlo
fuente
Para ampliar aún más la publicación de Simon Johnsons: lo ideal es que desee una solución que simule las condiciones que verá en producción y modificar su código no hará eso y podría ser peligroso si olvida sacar el código antes de implementarlo.
Necesitará un certificado autofirmado de algún tipo. Si está utilizando IIS Express, ya tendrá uno de estos, solo tendrá que encontrarlo. Abra Firefox o el navegador que desee y vaya a su sitio web de desarrollo. Debería poder ver la información del certificado desde la barra de URL y, dependiendo de su navegador, debería poder exportar el certificado a un archivo.
A continuación, abra MMC.exe y agregue el complemento Certificado. Importe su archivo de certificado a la tienda Trusted Root Certificate Authorities y eso es todo lo que necesita. Es importante asegurarse de que entre en esa tienda y no en otra tienda como 'Personal'. Si no está familiarizado con MMC o certificados, existen numerosos sitios web con información sobre cómo hacerlo.
Ahora, su computadora en su conjunto confiará implícitamente en cualquier certificado que haya generado y no necesitará agregar código para manejar esto especialmente. Cuando pase a producción, seguirá funcionando siempre que tenga un certificado válido adecuado instalado allí. No haga esto en un servidor de producción; sería malo y no funcionará para ningún otro cliente que no sea el del servidor.
fuente