SSL (Secure Sockets Layer) y TLS (Transport Layer Security) son protocolos criptográficos que garantizan la transmisión segura de datos entre un cliente y un servidor a través de la red. Cifran todo el tráfico, evitando la interceptación y modificación de datos por parte de atacantes. Según el Google Transparency Report (2025), más del 95% de todo el tráfico móvil mundial utiliza cifrado TLS. Sin este protocolo, cualquier información enviada a través de una red Wi-Fi abierta o una red móvil puede ser leída por terceros. Cloudflare, 2024
Puntos Clave
SSL (Secure Sockets Layer) es un protocolo desarrollado por Netscape en 1995 para proteger el tráfico web. La primera versión, SSL 1.0, nunca se publicó; SSL 2.0 (1995) y SSL 3.0 (1996) se usaron hasta principios de los 2000, pero contenían vulnerabilidades críticas. SSL fue sucedido por TLS (Transport Layer Security) — una versión mejorada estandarizada por la IETF. TLS 1.0 (1999) se basó en SSL 3.0, mientras que las versiones posteriores TLS 1.1 (2006), TLS 1.2 (2008) y TLS 1.3 (2018) se alejaron gradualmente de la arquitectura original, añadiendo nuevos algoritmos de cifrado y corrigiendo vulnerabilidades. Hoy en día, SSL se considera obsoleto y todos los sistemas modernos usan TLS, aunque ambos protocolos suelen mencionarse juntos como SSL/TLS por inercia.
La historia de SSL/TLS comenzó con la necesidad de transmisión segura de datos en los inicios de la web. En 1994, Netscape desarrolló SSL 1.0 para su navegador Navigator, pero el protocolo nunca se publicó debido a graves problemas de seguridad. SSL 2.0 se lanzó en 1995 y tuvo uso práctico, aunque contenía numerosas vulnerabilidades: falta de protección contra ataques Man-in-the-Middle, algoritmos de cifrado débiles y susceptibilidad a ataques de truncamiento. SSL 3.0 (1996) solucionó la mayoría de los problemas, pero para 2014 se descubrió la vulnerabilidad POODLE, tras lo cual la IETF declaró oficialmente obsoletas todas las versiones de SSL. TLS 1.0–1.3 mejoraron progresivamente la solidez criptográfica, el rendimiento y la privacidad, reduciendo TLS 1.3 el handshake de dos a una sola ida y vuelta, algo crítico para aplicaciones móviles con conexiones inestables.
Handshake es el proceso de establecimiento de una conexión segura entre un cliente y un servidor. Consta de varios pasos secuenciales durante los cuales las partes acuerdan la versión del protocolo, seleccionan algoritmos de cifrado, intercambian claves y se autentican mutuamente. En TLS 1.3, el handshake requiere solo un viaje de ida y vuelta (1-RTT), mientras que TLS 1.2 necesitaba dos (2-RTT).
El primer paso es que el cliente envíe un ClientHello — un mensaje que contiene una lista de versiones TLS compatibles, conjuntos de cifrado y un número aleatorio. El servidor responde con un ServerHello que incluye la versión y el cifrado elegidos, su certificado X.509 y una firma digital. El cliente verifica el certificado a través de la cadena de autoridades certificadoras (CA), genera una clave de sesión y la envía cifrada con la clave pública del servidor extraída del certificado. Tras la confirmación del servidor, comienza la transmisión segura de datos. Todo el handshake toma entre 1 y 3 milisegundos en dispositivos modernos, lo que lo hace imperceptible para el usuario.
La base de la autenticación TLS es la Infraestructura de Clave Pública (PKI) construida sobre certificados en formato X.509. Cada certificado contiene: un nombre de dominio (Common Name o Subject Alternative Name), la clave pública del servidor, el nombre del emisor (Autoridad Certificadora), una fecha de vencimiento y la firma digital de la CA. El cliente verifica el certificado del servidor a lo largo de la cadena de confianza: desde el certificado del servidor hasta la CA raíz, cuyo certificado está integrado en el sistema operativo. En dispositivos Android, los certificados raíz se almacenan en el almacén de claves del sistema, actualizado mediante Google Play Services; en iOS, mediante las actualizaciones de iOS. Si algún eslabón de la cadena se rompe (certificado vencido, discrepancia de dominio, CA desconocida), el cliente termina la conexión. Para certificados autofirmados (usados en desarrollo), se requiere confianza explícita — en Android mediante Network Security Config, en iOS mediante NSExceptionDomains en Info.plist. El proceso de validación de la cadena de certificados también incluye la verificación del estado de revocación mediante CRL (Lista de Revocación de Certificados) u OCSP (Protocolo de Estado de Certificados en Línea), aunque en dispositivos móviles las solicitudes OCSP a menudo se omiten para acelerar la conexión — este es un compromiso entre seguridad y rendimiento que los arquitectos deben considerar.
Aunque los términos SSL y TLS se usan a menudo como sinónimos, existen diferencias técnicas fundamentales entre ellos que afectan la seguridad y el rendimiento de las aplicaciones móviles.
| Característica | SSL 3.0 | TLS 1.2 | TLS 1.3 |
|---|---|---|---|
| Año de lanzamiento | 1996 | 2008 | 2018 |
| Estado | Obsoleto (RFC 7568) | Activo (recomendado) | Actual (mejor) |
| Viajes de ida y vuelta | 2 | 2 | 1 |
| Algoritmo de intercambio de claves | RSA | RSA, ECDHE | ECDHE (solo) |
| Cifrado autenticado | No | GCM, CCM | AEAD obligatorio |
| Perfect Forward Secrecy | No | Opcional | Obligatorio |
La principal diferencia entre TLS 1.3 y sus predecesores es el uso obligatorio de Perfect Forward Secrecy (PFS) mediante el protocolo ECDHE. Esto significa que incluso si un atacante obtiene acceso a la clave privada del servidor, no podrá descifrar el tráfico interceptado anteriormente. Para aplicaciones móviles, donde el compromiso del servidor es una amenaza real, TLS 1.3 con PFS es un requisito de seguridad obligatorio.
Las versiones antiguas de SSL y TLS tienen vulnerabilidades bien documentadas que las hacen inadecuadas para uso en producción. POODLE (CVE-2014-3566) ataca SSL 3.0 mediante un padding oracle, permitiendo descifrar cookies de sesión en 256 solicitudes. BEAST (CVE-2011-3389) explota una vulnerabilidad en el modo CBC de TLS 1.0 mediante un IV predecible. Heartbleed (CVE-2014-0160) — no es una vulnerabilidad del protocolo sino un error en la implementación de OpenSSL que permite leer la memoria del servidor: según Netcraft, más de 500.000 servidores eran vulnerables en 2014. A partir de Android 10 (API 29) e iOS 13, todos estos protocolos están deshabilitados a nivel de sistema. No obstante, los desarrolladores deben verificar la configuración de su servidor mediante SSL Labs Test (qualys.com) antes de lanzar una aplicación para asegurarse de que no haya conjuntos de cifrado obsoletos y que se admita TLS 1.3.
En las aplicaciones móviles, TLS protege los datos en tres niveles: cifrado del contenido (nadie excepto el servidor puede leer los datos), verificación de integridad (los datos no pueden modificarse en tránsito) y autenticación del servidor (el cliente está seguro de que se conecta al servidor correcto). La autenticación es especialmente crítica: sin ella, un atacante puede suplantar al servidor mediante suplantación de DNS o un punto de acceso Wi-Fi falso.
Según un estudio de Google Play Protect (2024), el 76% de las aplicaciones Android usan TLS correctamente con verificación de certificados. El 24% restante comete errores: deshabilitan la verificación de certificados para pruebas (y olvidan volver a habilitarla en producción), usan certificados autofirmados sin validación o permiten protocolos obsoletos como SSL 3.0 y TLS 1.0. Apple App Transport Security (ATS) en iOS exige al menos TLS 1.2 desde 2017, y a partir de iOS 15 utiliza TLS 1.3 por defecto para todas las solicitudes de red. Para protección adicional, también se recomienda implementar Certificate Pinning — vinculación a un certificado específico del servidor.
Veamos un ejemplo de configuración de una conexión HTTPS segura en Android usando OkHttp — una de las bibliotecas de red más populares. Una configuración adecuada incluye forzar el uso de TLS 1.3 y la verificación de certificados.
val client = OkHttpClient.Builder()
.connectionSpecs(
listOf(
ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
.tlsVersions(TlsVersion.TLS_1_3, TlsVersion.TLS_1_2)
.cipherSuites(
CipherSuite.TLS_AES_128_GCM_SHA256,
CipherSuite.TLS_AES_256_GCM_SHA384,
CipherSuite.TLS_CHACHA20_POLY1305_SHA256
)
.build()
)
)
.hostnameVerifier { hostname, session ->
SSLSession.DefaultHostnameVerifier.verify(hostname, session)
}
.build()
En este ejemplo, restringimos el conjunto de versiones TLS compatibles solo a 1.3 y 1.2, excluyendo las obsoletas TLS 1.0/1.1. Los conjuntos de cifrado se seleccionan entre algoritmos modernos con modo AEAD y Perfect Forward Secrecy obligatoria. El HostnameVerifier verifica que el nombre del host coincida con el certificado. En iOS, una configuración similar se realiza mediante la configuración de URLSession con el parámetro tlsMinimumSupportedProtocolVersion establecido en .TLSv13. Adicionalmente, en iOS se puede establecer tlsMaximumSupportedProtocolVersion para limitar la versión superior — útil para la compatibilidad con servidores antiguos que aún no han migrado a TLS 1.3. Esta configuración garantiza el máximo nivel de seguridad para la transmisión de datos en una aplicación móvil.
Preguntas Frecuentes
TLS es una versión más nueva y segura del protocolo. SSL está obsoleto y no debe usarse (RFC 7568). En la práctica, ambos términos se refieren al cifrado HTTPS, pero técnicamente todos los sistemas modernos funcionan con TLS 1.2 o 1.3.
Instale una herramienta proxy como Burp Suite o Charles Proxy e intercepte el tráfico de la aplicación. Si la conexión usa HTTPS y el certificado es válido — la aplicación usa TLS. Si el tráfico va por HTTP — no hay cifrado.
Solo TLS 1.2 y TLS 1.3 están permitidos para compilaciones de producción. Los protocolos SSL 3.0, TLS 1.0 y TLS 1.1 deben estar deshabilitados tanto en el servidor como en la aplicación cliente. Desde 2020, las principales plataformas (Android, iOS, navegadores) exigen al menos TLS 1.2.
Sí, se recomienda. TLS verifica el certificado a través de una cadena de autoridades certificadoras, pero si alguna CA se ve comprometida (como ocurrió con DigiNotar en 2011), un atacante podría emitir un certificado falso. El Pinning añade una capa adicional de verificación.
TLS 1.3 reduce el tiempo de establecimiento de conexión de 2 viajes de ida y vuelta a 1, lo que supone una mejora del 30–50% en la primera conexión. Para aplicaciones móviles con conexiones inestables (metro, trenes), esto es crítico para la velocidad de carga de datos.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también