Usar certificados SSL de clientes como autenticación de aplicaciones web

8

Estoy trabajando en una aplicación web con una API simple que requiere autenticación. Para la naturaleza de mi aplicación, los usuarios tienen dos claves RSA, para firmar y cifrar mensajes. Mi protocolo funciona basado en ello. La aplicación web tiene acceso a claves públicas.

Una solución para lograr la autenticación y eliminar MITM es crear SSL sobre la API de la aplicación y crear un método de autenticación utilizando las claves del usuario. Pasar mensajes simples. Pero estoy pensando en otro método ... Hacer autenticación basada en la certificación de cliente SSL. Usé certificados de cliente para proyectos anteriores, pero tengo algunos problemas para decidir si usarlo para este proyecto:

  1. ¿Es una mala idea usar una de las claves RSA del usuario para generar el certificado?

  2. ¿Hay algún servidor web (como contenedor de SSL) que pueda permitirme extender las funcionalidades durante la negociación de SSL con un programa externo? Me refiero a que cuando el usuario envía una solicitud de SSL, busco su certificado en una base de datos (a) y si lo encuentro, inserte un registro en una base de datos como ID de sesión y la aplicación web usa este (b). Esto significa no solo dar acceso a algunos usuarios, sino descubrir qué usuario está conectado. RESPUESTA : al menos nginx admite pasar el certificado de cliente recibido a la aplicación web. Pasé por esto.

  3. Análisis sobre el rendimiento. Dudo acerca del gran número de usuarios y de este rendimiento de autenticación basada en certificados, pero la autenticación es una parte de mi aplicación que se debe hacer y SSL también. ¿Qué carga adicional y latencia puedo esperar al usar los certificados de servidor y del cliente en comparación con el uso de certificados de servidor? RESPUESTA : consulte respuesta .

  4. de MadHatter.

Gracias por tus sugerencias y disculpa mi mal inglés.

    
pregunta Amabo 05.03.2013 - 08:25
fuente

1 respuesta

5
  1. El método normal para realizar la validación de certificados de clientes es crear su propia Autoridad de Certificación (CA) y usar esa CA para acuñar los certificados de clientes, que se distribuyen a los clientes. Entonces, el servidor solo tiene que verificar que un certificado de cliente tenga una firma válida de la CA preconfigurada, o que tenga una cadena de confianza válida que lleve a esa CA, para saber que el certificado de cliente es bueno.

  2. Ver más arriba.

  3. Muy poca sobrecarga adicional, al menos cuando se hace como se indicó anteriormente. De todos modos, todos los clientes tienen certificados (claves públicas), solo (por lo general) autofirmados y se usan solo para el cifrado en lugar del cifrado y de autenticación; Si un cliente usa un certificado con una firma válida en su lugar, hacer que el servidor valide ese certificado es una sobrecarga adicional muy pequeña.

respondido por el MadHatter 05.03.2013 - 10:29
fuente

Lea otras preguntas en las etiquetas