none
Validación contra pagina HTTPS RRS feed

  • Pregunta

  • Hola!

    Estoy con una aplicación webforms en Visual Studio 2017 intentando validarme contra una url HTTPS (CAS)

    <authentication mode="Forms">
          <forms
                 loginUrl="https://blabla.bla"
                 cookieless="UseCookies"
          />
        </authentication>

    Me está dando error en la validación:

    DotNetCasClient.Protocol Information: 3237 : Ticket validation failed: System.Net.WebException: Se ha terminado la conexión: No se puede establecer una relación de confianza para el canal seguro SSL/TLS. ---> System.Security.Authentication.AuthenticationException: El certificado remoto no es válido según el procedimiento de validación.

    La ejecución la estoy haciendo desde el Visual Studio. ¿Dónde y Cómo tengo que agregar ese certificado para que al ejecutar desde Visual Studio haya una relación de confianza?

    Gracias.

    miércoles, 8 de noviembre de 2017 12:50

Respuestas

  • Hola. Lo que estás intentando hacer de aceptar los certificados es una muy mala práctica en un entorno productivo. Lo que necesitas es instalarte en tu servidor un certificado válido de autenticación cliente y pasarlo en las peticiones. Revisa las configuraciones del formulario https externo para ver qué certificados requiere. 

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    jueves, 9 de noviembre de 2017 18:28
    Moderador

Todas las respuestas

  • hola

    si es un servicio que invocas deberias ver de usar

    ServicePointManager.ServerCertificateValidationCallback

    com se mencina aqui

    HttpRequest llamada a https. 

    de esta forma aceptas el certificado para invocar al servicio

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 8 de noviembre de 2017 17:19
  • No es un servicio. Es una redirección a un formulario https externo:

    <authentication mode="Forms">
          <forms
                 loginUrl="https://blabla.bla"
                 cookieless="UseCookies"
          />
        </authentication>

    Es un tema de validación CAS desde .NET con una librería específica para ello.

    https://github.com/apereo/dotnet-cas-client

    De momento poniendo en el Global.asax:

    ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications);
    public bool AcceptAllCertifications(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certification, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)
    {
        return true;
    }

    está funcionando, pero ¿si no quiero aceptar todos los certificados y solo quiero uno en concreto?

    Un saludo.

    jueves, 9 de noviembre de 2017 10:11
  • Hola. Lo que estás intentando hacer de aceptar los certificados es una muy mala práctica en un entorno productivo. Lo que necesitas es instalarte en tu servidor un certificado válido de autenticación cliente y pasarlo en las peticiones. Revisa las configuraciones del formulario https externo para ver qué certificados requiere. 

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    jueves, 9 de noviembre de 2017 18:28
    Moderador
  • Hola. Lo que estás intentando hacer de aceptar los certificados es una muy mala práctica en un entorno productivo. Lo que necesitas es instalarte en tu servidor un certificado válido de autenticación cliente y pasarlo en las peticiones. Revisa las configuraciones del formulario https externo para ver qué certificados requiere. 

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    Lo que necesitas es instalarte en tu servidor un certificado válido de autenticación cliente y pasarlo en las peticiones.

    ¿Y cómo lo paso en las peticiones?

    jueves, 23 de noviembre de 2017 9:10
  • Hola, 

    te paso un ejemplo

    X509Store store = new X509Store(StoreName.Root, StoreLocation.LocalMachine); // configurar el almacén de certificados 
    store.Open(OpenFlags.ReadOnly);  // abrir el almacén de certificados
    X509Certificate2Collection col =  store.Certificates.Find(X509FindType.FindByThumbprint, "{aquí el thumbprint}", true); // puedes buscar el certificado también usando otros parámetros. 
    
    MyWebService service = new MyWebService();
    
    service.ClientCertificates.Add(col[0]); // validar antes si "col" tiene datos


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    jueves, 23 de noviembre de 2017 10:33
    Moderador
  • Qué clase es MyWebService?

    jueves, 23 de noviembre de 2017 12:34
  • Es tu proxy que has generado con Add Service Reference

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    jueves, 23 de noviembre de 2017 21:25
    Moderador