none
Saltarme el problema con el certificado de seguridad de un sitio web.

    Question

  • Hola buenas. Estamos trabajando en una página web que centralize usuarios y passwords de otras webs. Tengo guardados los usuarios y los passwords y me creo un form que hace submit a la página de login de la web externa a donde nos queremos conectar. Un form post al que hago submit en el onload y en algunos casos está solucionado, pero en las que son https y el certificado de seguridad está caducado habría que hacer clic al continuar y no le llegan ya entonces al formulario los datos de login. ¿Alguien sabe como saltarse "por código" este certificado?¿o como conseguir logarse "por código"?
    He intentado algún experimento con javacript para hacer clic sobre el link de "Vaya a este sitio web (no recomendado)" pero me da un error de "acceso denegado". ¿A alguien se le ocurre algo?

    SRG.
    Friday, July 24, 2009 10:54 AM

Answers

  • Hola sergio,

    yo puedo comentarte como saltartelo en una aplicación Windows Forms, no sé si para ASP.NET es exactamente igual, deberías probar.

    En una aplicación WinForms o de consola utilizo la clase estática ServicePointManager tal que así:

     

    //Especifico un callback a una función que validará un certificado remoto (la pantalla del explorer que tienes que pulsar aceptar para continuar.
    
    ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(OnValidationCallback);
    
    
    //Ahora defino el método que capturará el evento
    public static bool OnValidationCallback(object sender, System.Security.Cryptography.X509Certificates.X509Certificate cert, X509Chain chain, SslPolicyErrors errors)
    {
        //Simplemente devolvemos un true indicando que el certificado es válido --> es lo mismo que pulsar el botón continuar.
        return true;
    }
    A ver si esto te ayuda!
    En caso de que la respuesta te sirva, porfavor, márcala como válida

    Muchas gracias y suerte!


    Javier Jiménez Roda


    MCP (Microsoft Certified Professional)
    MCTS (Microsoft Certified Technology Specialist)
    MCPD (Microsoft Certified Professional Developer)
    Blog: http://jimenezroda.wordpress.com

    • Marked as answer by Sergio Patón Monday, July 27, 2009 1:23 PM
    Friday, July 24, 2009 11:06 AM
  • No podrás acceder por script a una página que no esté en tu dominio por temas de seguridad, esto es normal sino cualquiera podría modificar la página de otro sin permisos ;-). A no ser que ellos den acceso explicitamente a tu dominio.

    Mas que saltarse el certificado tu lo que intentas es aceptar el aviso de seguridad del navegador y el ejemplo http://blog.jameshiggs.com/2008/05/01/c-how-to-accept-an-invalid-ssl-certificate-programmatically/  lo que hace es una petición HttpWebRequest igual a lo que te comenta Javier.

    Veo dificil que puedas solucionar este problema y además es probable que en diferentes navegadores no funcione de la misma manera.

    Saludos.


    Si la respuesta ha sido de utilidad marca la como respuesta correcta.

    Marc Rubiño
    Web:
    http://lonetcamp.com
    Blog: http://geeks.ms/blogs/mrubino
    • Marked as answer by Sergio Patón Monday, July 27, 2009 1:22 PM
    Monday, July 27, 2009 12:05 PM
    Moderator

All replies

  • Hola sergio,

    yo puedo comentarte como saltartelo en una aplicación Windows Forms, no sé si para ASP.NET es exactamente igual, deberías probar.

    En una aplicación WinForms o de consola utilizo la clase estática ServicePointManager tal que así:

     

    //Especifico un callback a una función que validará un certificado remoto (la pantalla del explorer que tienes que pulsar aceptar para continuar.
    
    ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(OnValidationCallback);
    
    
    //Ahora defino el método que capturará el evento
    public static bool OnValidationCallback(object sender, System.Security.Cryptography.X509Certificates.X509Certificate cert, X509Chain chain, SslPolicyErrors errors)
    {
        //Simplemente devolvemos un true indicando que el certificado es válido --> es lo mismo que pulsar el botón continuar.
        return true;
    }
    A ver si esto te ayuda!
    En caso de que la respuesta te sirva, porfavor, márcala como válida

    Muchas gracias y suerte!


    Javier Jiménez Roda


    MCP (Microsoft Certified Professional)
    MCTS (Microsoft Certified Technology Specialist)
    MCPD (Microsoft Certified Professional Developer)
    Blog: http://jimenezroda.wordpress.com

    • Marked as answer by Sergio Patón Monday, July 27, 2009 1:23 PM
    Friday, July 24, 2009 11:06 AM
  • Primero muchas gracias por la respuesta. Intenté algo parecido que encontré en http://blog.jameshiggs.com/2008/05/01/c-how-to-accept-an-invalid-ssl-certificate-programmatically/ pero no conseguí lo que quería. La verdad es que no sé que hace, parece que lee una página... pero no la muestra....
    A mí es que me parece que no se puede, porque estoy abriendo otra página que "no es de mía" (que no es de mí web). Inclusó intenté abrirla con javascript y que hiciese clic sobre el "Vaya a este sitio web (no recomendado). ":
    abierta = window.open(https://servidor/paginanosegura.aspx,"abierta","width=100,height=300");
    abierta.document.getElementById("overridelink").click();
    Me daba un error de acceso denegado.

    Con el punto.net me parece complicado controlar una página de fuera desde la nuestras, ¿dices que desde un winform puedes hacerlo con una página asp lo de saltartelo?¿tienes el código?¿sólo la lees o también la muestras?

    Muchas gracias.
    ps: espero disculpes la forma de expresarme no excesivamente técnica.


    SRG.
    Monday, July 27, 2009 8:39 AM
  • Hola sergio.paton,

    si, desde windows forms puedo hacer peticiones http a páginas que precisen de certificado y saltarme la validación tal y como te mostré en el mensaje anterior. El único código requerido para "saltarme" la validación explícita es el que te muestro. Lo que pasa es que debes disponer del certificado que se te pide (es decir, si no dispones del certificado que la web te está reclamando, no podrás acceder a ella). Aún y teniendo el certificado, es posible que éste no esté correctamente formado (y te de errores tales como, el nombre del certificado no coincide con la url especificada y cosas así). Por ese motivo es necesario ejecutar el código que te mostré, para que valide el certificado sin esperar a que el usuario indique que el certificado es correcto.

    Eso si, si no dispones del certificado no hay forma (almenos legal) de acceder a esa web. Si dispones del certificado y el único impedimento que debes salvar es el mensaje de validación, entonces los tiros deberían ir por donde te comento...pero ya te digo que yo lo hice para Winforms, nunca me he encontrado con la tesitura de hacerlo para ASP.NET...

    En caso de que la respuesta te sirva, porfavor, márcala como válida

    Muchas gracias y suerte!


    Javier Jiménez Roda


    MCP (Microsoft Certified Professional)
    MCTS (Microsoft Certified Technology Specialist)
    MCPD (Microsoft Certified Professional Developer)
    Blog: http://jimenezroda.wordpress.com

    Monday, July 27, 2009 9:05 AM
  • No podrás acceder por script a una página que no esté en tu dominio por temas de seguridad, esto es normal sino cualquiera podría modificar la página de otro sin permisos ;-). A no ser que ellos den acceso explicitamente a tu dominio.

    Mas que saltarse el certificado tu lo que intentas es aceptar el aviso de seguridad del navegador y el ejemplo http://blog.jameshiggs.com/2008/05/01/c-how-to-accept-an-invalid-ssl-certificate-programmatically/  lo que hace es una petición HttpWebRequest igual a lo que te comenta Javier.

    Veo dificil que puedas solucionar este problema y además es probable que en diferentes navegadores no funcione de la misma manera.

    Saludos.


    Si la respuesta ha sido de utilidad marca la como respuesta correcta.

    Marc Rubiño
    Web:
    http://lonetcamp.com
    Blog: http://geeks.ms/blogs/mrubino
    • Marked as answer by Sergio Patón Monday, July 27, 2009 1:22 PM
    Monday, July 27, 2009 12:05 PM
    Moderator