Identificación del cliente mediante certificados de cliente

7

Tengo el siguiente escenario:

  • Varios servidores integrados independientes (Linux / ARM / lighttpd)
  • Varios dispositivos de control independientes (win32 / iOS / Android)
  • Cada servidor debe tener al menos un dispositivo de control
  • Cada dispositivo de control puede controlar uno o más servidores
  • Ninguno, pero los dispositivos de control deben poder comunicarse con los servidores

Comprendo que puedo usar los Certificados de Cliente para garantizar el "emparejamiento de dispositivo / servidor", pero no estoy seguro si es posible y (eventualmente) cómo configurar mis sistemas para cumplir con los siguientes requisitos adicionales:

  1. Instalación del Certificado de Cliente sin problemas: Quiero decir, me gustaría tener algún procedimiento automatizado iniciado en el servidor (posiblemente a través del botón físico) que creará e implementará un Certificado de Cliente específico (algo similar a la "Configuración protegida Wi-Fi" ").
  2. Creación de certificados basada en roles: cada dispositivo de control debe tener un "rol", lo que significa que puede realizar un conjunto definido de operaciones en el servidor; Básicamente, solo necesito incrustar algunos datos en el certificado en el momento de la creación.
  3. Los certificados de cliente deben caducar y revocarse (creo que esto es estándar, pero se debe permitir al crear el certificado).

La verdadera pregunta es cómo configurar (1), donde tengo una pequeña pista. He buscado en Internet, pero solo encontré la forma "normal" (generar certificado, autofirmar, importar manualmente en el navegador) que es manera demasiado compleja para mis Clientes :(; esperaba poder generar una URL (o imprimir una Qr) que, ingresada en el dispositivo de control, configuraría "automáticamente" su navegador (posiblemente con solo una simple confirmación "OK"). ¿Es esto (o algo equivalente a prueba de tontos) posible? de alguna manera?

Los consejos y comentarios sobre los otros temas son bienvenidos (¡por supuesto!)

NOTA: No estoy exigiendo seguridad a prueba de bancos, solo un compromiso razonable; el foco está en cuánto puedo lograr "sin molestar a los usuarios" (ingresar una contraseña es considerado molesto, desafortunadamente).

    
pregunta ZioByte 21.12.2015 - 10:33
fuente

1 respuesta

2

Recientemente he estado cavando en el campo Certificado, y sé que ha pasado un mes desde que lo pediste, pero espero que esto te ayude de alguna manera.

Para otorgar a cada uno de sus clientes un certificado, básicamente necesitará un servidor con su propio certificado autofirmado. Este servidor "dará" a sus clientes su nuevo certificado. El flujo sería algo como esto:

1) [FRONTEND] El cliente genera un par de llaves y envía la clave pública al servidor, solicitando un nuevo certificado.

2) [BACKEND] El servidor genera un nuevo certificado basado en la clave pública del cliente y lo envía de vuelta al cliente con un encabezado específico que dice que es un certificado.

3) [FRONTEND] El cliente "descarga" el certificado, el navegador sabe que es un certificado y le pide al cliente que lo instale en el navegador con solo un clic.

Para (1), hay formas de hacerlo con solo un clic. Para la mayoría de los navegadores puede usar la etiqueta html "keygen", para IE lamentablemente tiene que usar ActiveX. Para (2), necesitará algún tipo de módulo de gestión de CA, hay algunos gratuitos, como OpenCA o EJBCA.

Podría ser un poco difícil de implementar, pero proporciona una autenticación indudable para sus clientes, ya que están utilizando certificados firmados por usted, y es realmente muy fácil para el cliente, no necesita más de 2 o formulario de 3 campos y dos clics.

    
respondido por el Daniel Facciabene 29.01.2016 - 16:57
fuente

Lea otras preguntas en las etiquetas