Estoy diseñando una API diseñada para ser utilizada por un número muy limitado de clientes de confianza, probablemente un clúster de servidores. Se puede acceder a la API solo a través de HTTPS . Para autenticar a los clientes, estoy considerando 3 métodos:
- certificado de cliente TLS. El certificado puede ser emitido internamente ya que tanto el servidor como el cliente son operados por la misma organización.
- HMAC-SHA1 sobre algunos elementos de datos: URL solicitada, fecha y hora, ... para cada solicitud. El MAC se pondrá en el encabezado HTTP. En otras palabras, una versión más sencilla de autenticación REST de Amazon S3 .
- autenticación básica HTTP con nombre de usuario previamente compartido & contraseña.
A mi entender:
- El certificado TLS es el "más seguro" de los tres, mientras que la autenticación básica HTTP es el "menos seguro". "Más seguro" es en el sentido de que el método proporciona protección contra todos los ataques también protegidos por otros, y algunos más.
- HMAC-SHA1 es vulnerable a ataques de repetición, sin embargo, dado que la comunicación será asegurada por TLS de todos modos, no debería haber ningún problema.
- La autenticación básica HTTP pone el secreto compartido en el cable todo el tiempo (aunque todavía está protegido con TLS), por lo que tengo algunas preocupaciones (posiblemente infundadas) al respecto.
¿Mis puntos son correctos? ¿Debo conocer otros problemas de seguridad?