Autenticación de cliente
En un TLS normal solo el servidor demuestra quién es. Con mTLS también lo hace el cliente, y esa simetría es lo que permite distinguir tu app real de cualquier otra cosa que hable HTTPS.
TLS mutuo (mutual TLS o mTLS) es TLS estándar con la autenticación de cliente activada. Durante el handshake el servidor pide un certificado, el cliente lo presenta y demuestra que posee la clave privada correspondiente. Si algo falla, la conexión se corta antes de que viaje un solo byte de la petición HTTP.
No es un protocolo nuevo ni propietario: está en TLS desde el principio y tu servidor web ya sabe hacerlo. Lo que históricamente ha impedido usarlo en apps de consumo no es el protocolo, sino la logística de emitir, distribuir, renovar y revocar un certificado por dispositivo.
El backend de una app móvil no tiene forma fiable de saber quién le está hablando. La cabecera User-Agent se falsifica, una API key incrustada en el binario se extrae con herramientas estándar, y un token de sesión solo demuestra que alguien se autenticó antes, no qué cliente lo está usando ahora.
Un certificado por dispositivo cambia la pregunta: en vez de comprobar un secreto compartido que viaja en cada petición, se comprueba la posesión de una clave privada que nunca sale del dispositivo.
Aquí es donde fracasan la mayoría de los intentos caseros de mTLS en móvil. Emitir el primer certificado es fácil; lo difícil es todo lo demás.
La validación la hace tu propio servidor de entrada. En Nginx se traduce en indicar la cadena de CA que se acepta y exigir el certificado en las rutas que lo requieran; el resto de tu arquitectura no cambia.
Como la comprobación ocurre en el borde y en la capa de transporte, el tráfico rechazado no llega a tu aplicación: no consume trabajadores, ni conexiones a base de datos, ni cuota de tu proveedor de SMS.
Pide acceso a la beta cerrada y a la documentación de integración.