Hola,
ayer realicé este misma pregunta en el foro de Servidores Web, y después he pensado que probablemente sería este de PHP más apropiado que el de servidores. Si estoy incumpliendo alguna norma del foro por repetir post pido disculpas, pero no sé cómo mover un hilo o ni siquiera si eso es posible.
Allá voy: planteo mi pregunta aquí porque a pesar de haber mucha documentación sobre el tema, no termino de encontrar la manera de resolverlo de forma concreta, igual es que hay conceptos que no tengo claros y por eso necesito que alguien me ponga sobre la pista correcta.
Necesito desarrollar una aplicación en PHP que pida autenticación pero no de la manera usual username+password, sino que pida un certificado digital que el usuario deberá tener instalado en su navegador. Lo particular del asunto es que dicho certificado debe ser válido de una autoridad certificadora (CA) ya existente, en este caso la FNMT, es decir, no se trata de generar mi propio certificado raíz autofirmado y luego darle al usuario su certificado válido para mi certificado raíz, sino que el certificado del usuario él ya lo habrá obtenido por su lado (la FNMT es la Fábrica Nacional de Moneda y Timbre de España y ya hay muchas personas que disponen de su certificado) y dicho certificado le servirá también para validarse en mi aplicación.
Por tanto, el procedimiento consistirá en que cuando el usuario se conecte a mi aplicación, el navegador le pedirá que escoja un certificado de los que estén instalados en el navegador, y al aceptar enviará dicho certificado a mi aplicación que tendrá que validar que dicho certificado es correcto para permitir el acceso.
No sé si me he explicado bien, pero ya he buscado documentación y realizado pruebas de todo tipo y no termino de tenerlo claro:
- ¿Debo instalar el certificado raíz de la FNMT en mi Apache o es suficiente con validar el certificado de usuario contra el fichero .pem de la FNMT mediante openssl?
- ¿Debo crear un servidor virtual para mi aplicación para que la conexión se realice a través de https:// o puede mi aplicación solicitarle al usuario su certificado digital sin necesidad de https://?
Alguien que controle de estos temas verá que igual no termino de tener claros algunos conceptos claves, pero en resumen lo único que necesito es que mi aplicación pida un certificado al usuario y una vez obtenido, validar que dicho certificado es correcto para la CA concreta (la FNMT).
Gracias y ojalá alguien me pueda echar un cable!