Usando certificados para asegurar

11

Estoy trabajando en una aplicación que comprende una WebAPI de C # (en los sitios web de Azure) y una aplicación móvil nativa. Esencialmente, un cliente crea una serie de mensajes usando una interfaz web y estos pueden ser explorados en la aplicación móvil. En la actualidad, no hay restricción sobre estos datos.

Una nueva función requiere que algunos clientes puedan proteger sus datos, por lo que solo las personas autorizadas pueden acceder. No queremos usar un nombre de usuario / contraseña ya que la sobrecarga sería demasiado grande. Nuestros clientes pueden tener cientos o miles de personas que desean navegar por sus mensajes.

Mi enfoque iba a ser:

  1. El usuario crea un servicio a través de nuestro portal web.
  2. El usuario carga una clave pública en este servicio, que almacenamos.
  3. El usuario distribuye la clave privada correspondiente mediante un MDM a todos los dispositivos que deseen explorar los mensajes.
  4. Las solicitudes HTTP para estos mensajes requieren que se presente el certificado.
  5. La API valida la solicitud usando la clave pública.

Hay dos cosas que me están molestando.

No utilizaremos una CA para verificar la cadena de certificados. Los certificados del cliente pueden ser autofirmados. No veo que esto sea un gran problema ya que sabemos quiénes son nuestros clientes.

Tener la clave privada distribuida en muchos dispositivos podría considerarse algo malo, aunque creo que este escenario es bastante común, por ejemplo. autenticando a MS Exchange. La responsabilidad de proteger la clave privada residiría en el cliente.

Por lo tanto, a mi pregunta: ¿Este enfoque parece correcto?

Además, los sitios web de Azure solo admiten la configuración de activación / desactivación de certificados de clientes, lo que hace imposible combinar llamadas tanto públicas como privadas. Sería bueno tener dos puntos finales, por ejemplo,

Se requeriría inteligencia en las aplicaciones para saber dónde ir, pero facilitaría mucho la configuración de las aplicaciones, ya que o bien tienen el certificado del cliente o no.

Mi pregunta adicional: ¿El uso de dos puntos finales es una práctica común?

    
pregunta Tomas McGuinness 13.12.2015 - 11:10
fuente

2 respuestas

1

Las claves privadas deben existir solo en un lugar. Si distribuye la clave privada a "usuarios autorizados", entonces los "usuarios autorizados" tienen todos los accesos del original y no pueden ser revocados.

El método correcto sería:

  • Todos los dispositivos comparten su clave pública, nunca su clave privada.
  • La clave pública es aprobada por el titular de la cuenta.
  • Cualquier cambio registrado debe incluir la clave pública que se usó, incluido el proceso de aprobación anterior.
  • Si desea que los datos se compartan entre nodos, pero no permita que el servidor / pirata informático tenga acceso a ellos, genere una clave aleatoria, encripte la información con la clave aleatoria y almacénela; luego, encripte la clave aleatoria con cada clave pública por turnos, y guárdelas. Luego tira la llave al azar. Cada usuario autorizado puede tomar la clave aleatoria cifrada, descifrarla con su clave privada para obtener la clave aleatoria y usarla para desencriptar los datos.
respondido por el AMADANON Inc. 15.04.2016 - 04:44
fuente
0

Pongo esto como una respuesta separada, para llamar la atención.

La pregunta anterior es un problema muy común: "Quiero seguridad, pero no quiero un esfuerzo de seguridad. Así que voy a recortar mi seguridad"

Su sistema será inseguro.

La sobrecarga de administrar las claves de los clientes será aproximadamente la misma que la sobrecarga de administrar sus contraseñas. Las personas perderán sus llaves, al igual que perderán su contraseña. Las personas tendrán sus claves comprometidas, mucho más fáciles, ya que no pusieron una contraseña en ellas. Si un dispositivo es robado, haga clic en un marcador y ya está.

La práctica de almacenar su certificado y verificar el certificado desde una base de datos, en lugar de seguir la cadena de CA, está bien: básicamente está verificando la clave pública. Eso es todo lo que necesitas hacer. Distribuir las mismas claves a múltiples dispositivos es una mala idea.

    
respondido por el AMADANON Inc. 14.06.2016 - 23:39
fuente

Lea otras preguntas en las etiquetas