Integridad del canal

SSL pinning y certificate pinning en Android

El pinning decide en qué certificados confía tu app, en vez de delegar esa decisión en el almacén de confianza del sistema. Bien hecho, cierra el paso a la interceptación; mal hecho, deja la app inservible el día que rotas el certificado.

De qué protege realmente

Por defecto, una app Android confía en cualquier certificado firmado por alguna de las autoridades del almacén del sistema. Eso incluye las CA que un usuario o un administrador pueda haber añadido, que es exactamente el mecanismo con el que funcionan los proxies de interceptación.

Con pinning, la app comprueba además que el certificado del servidor es el que espera. Un proxy que presente un certificado válido pero distinto deja de poder leer el tráfico.

Conviene ser preciso con lo que el pinning no hace: protege el canal, no acredita al cliente. Un atacante que analice tu app y hable con tu API desde su propio código sigue superando el pinning sin dificultad, porque el pinning solo mira hacia el servidor. Para autenticar al cliente hace falta mTLS.

Las tres formas de pinear

  • Al certificado del servidor: es la más estricta y la más frágil, porque rompe en cada renovación.
  • A la clave pública (SPKI): sobrevive a la renovación mientras se conserve el par de claves; es la práctica habitual y la que usa Network Security Configuration de Android.
  • A la CA intermedia: la más flexible y la más laxa, ya que acepta cualquier certificado que esa intermedia emita.

El fallo clásico: romper la app al rotar

Un pin incrustado en el APK solo se puede cambiar publicando una versión nueva y esperando a que los usuarios actualicen. Si el certificado caduca o hay que reemitirlo de urgencia antes de que eso ocurra, las instalaciones antiguas dejan de conectar y no hay nada que hacer desde el servidor.

Las dos medidas que evitan ese escenario son conocidas y conviene aplicarlas juntas: publicar siempre al menos un pin de respaldo, correspondiente a un par de claves ya generado y guardado para la siguiente rotación; y poder actualizar el conjunto de pines sin recompilar la aplicación.

Pinning gestionado

ShieldCert distribuye la configuración de pinning junto con el certificado de cliente, de modo que rotar no obliga a publicar una versión nueva en la tienda. Es el mismo mecanismo que hace posible usar certificados de corta duración sin convertir cada renovación en un incidente.

Pinning y mTLS en la misma integración

Pide acceso a la beta cerrada y prueba las dos cosas sobre tu app.