Autenticación de API web de estilo PKI

0

Estoy buscando un método relativamente simple (para el cliente que lo consuma) pero altamente seguro para la autenticación de usuarios en mi API. Por seguro me refiero a la autenticación fuerte. La API que se construirá será RESTful y, como tal, inherentemente sin estado.

No quiero usar la autenticación HTTP básica, ya que la clave se debe pasar en cada llamada a la API. Aunque la API solo estará disponible a través de HTTPS, siempre existe la posibilidad de un ataque MITM debido a que el cliente confía en una CA maliciosa. Más bien una posibilidad muy remota, pero me gustaría hacer este derecho para proteger los datos que se transmiten.

Mi propuesta es generar un par de claves, entregar la clave privada al cliente y mantener al público y una huella digital de la clave privada. El cuerpo de la llamada a la API se cifraría con la clave privada y se enviaría la huella digital.

El servidor buscaría la huella dactilar, la compararía con una cuenta, recuperaría la clave pública e intentaría descifrarla. Si falla, actúa como si el usuario no fuera quien dice ser (como lo indica la huella digital).

  1. ¿Es seguro mi diseño?
  2. ¿Hay mejores alternativas?
  3. Cualquier consejo / orientación sería muy apreciado.
pregunta sousdev 11.02.2017 - 17:24
fuente

1 respuesta

0

Los certificados de cliente son un método establecido que ya ofrece lo que necesita para que no necesite inventar el suyo. El proceso es incluso más simple que su versión porque solo puede usar las bibliotecas existentes. La idea básica de tener un par de claves para el cliente es la misma:

  • Usted crea un certificado para el cliente o el cliente crea uno por sí mismo. Este certificado es de confianza explícita por parte del servidor o implícitamente porque fue firmado por la autoridad de certificación (CA) del servidor.
  • En el protocolo de enlace TLS, el servidor solicita el certificado al cliente. Comprueba si el certificado es conocido y confiable. Si no la conexión falla.
  • Eso es todo.

Es imposible para un hombre en el centro interceptar activamente esta conexión mediante el uso de una CA maliciosa porque el hombre en el medio tendría que volver a escribir tanto el servidor como el certificado del cliente. Si bien es posible que no pueda controlar si el cliente confía en esta CA maliciosa, puede asegurarse de que el servidor solo confíe en el certificado conocido o en los certificados emitidos por la CA de servidores. Esto significa que un atacante no puede falsificar el certificado del cliente de manera que el servidor confíe en él.

    
respondido por el Steffen Ullrich 11.02.2017 - 17:44
fuente

Lea otras preguntas en las etiquetas