SSL (Secure Sockets Layer) e TLS (Transport Layer Security) são protocolos criptográficos que garantem a transmissão segura de dados entre um cliente e um servidor pela rede. Eles criptografam todo o tráfego, evitando a interceptação e modificação de dados por atacantes. De acordo com o Google Transparency Report (2025), mais de 95% de todo o tráfego móvel mundial usa criptografia TLS. Sem esse protocolo, qualquer informação enviada por Wi-Fi aberto ou rede móvel pode ser lida por terceiros. Cloudflare, 2024
Pontos Principais
SSL (Secure Sockets Layer) é um protocolo desenvolvido pela Netscape em 1995 para proteger o tráfego web. A primeira versão, SSL 1.0, nunca foi publicada; SSL 2.0 (1995) e SSL 3.0 (1996) foram usados até o início dos anos 2000, mas continham vulnerabilidades críticas. O SSL foi sucedido pelo TLS (Transport Layer Security) — uma versão melhorada padronizada pela IETF. TLS 1.0 (1999) foi baseado no SSL 3.0, enquanto as versões subsequentes TLS 1.1 (2006), TLS 1.2 (2008) e TLS 1.3 (2018) gradualmente se afastaram da arquitetura original, adicionando novos algoritmos de criptografia e corrigindo vulnerabilidades. Hoje, o SSL é considerado obsoleto e todos os sistemas modernos usam TLS, embora ambos os protocolos sejam frequentemente mencionados juntos como SSL/TLS por inércia.
A história do SSL/TLS começou com a necessidade de transmissão segura de dados no início da web. Em 1994, a Netscape desenvolveu o SSL 1.0 para seu navegador Navigator, mas o protocolo nunca foi publicado devido a sérios problemas de segurança. O SSL 2.0 foi lançado em 1995 e teve uso prático, embora contivesse inúmeras vulnerabilidades: falta de proteção contra ataques Man-in-the-Middle, algoritmos de criptografia fracos e suscetibilidade a ataques de truncamento. O SSL 3.0 (1996) corrigiu a maioria dos problemas, mas em 2014 foi descoberta a vulnerabilidade POODLE, após a qual a IETF declarou oficialmente todas as versões do SSL obsoletas. TLS 1.0–1.3 melhoraram progressivamente a solidez criptográfica, o desempenho e a privacidade, com TLS 1.3 reduzindo o handshake de duas viagens de ida e volta para uma — algo crítico para aplicativos móveis com conexões instáveis.
Handshake é o processo de estabelecimento de uma conexão segura entre um cliente e um servidor. Consiste em várias etapas sequenciais durante as quais as partes concordam com a versão do protocolo, selecionam algoritmos de criptografia, trocam chaves e se autenticam mutuamente. No TLS 1.3, o handshake leva apenas uma viagem de ida e volta (1-RTT), enquanto no TLS 1.2 eram necessárias duas (2-RTT).
O primeiro passo é o cliente enviar um ClientHello — uma mensagem contendo uma lista de versões TLS suportadas, conjuntos de cifra e um número aleatório. O servidor responde com um ServerHello contendo a versão e cifra escolhidas, seu certificado X.509 e uma assinatura digital. O cliente verifica o certificado através da cadeia de autoridades certificadoras (CA), gera uma chave de sessão e a envia criptografada com a chave pública do servidor extraída do certificado. Após a confirmação do servidor, começa a transmissão segura de dados. Todo o handshake leva de 1 a 3 milissegundos em dispositivos modernos, tornando-o imperceptível para o usuário.
A base da autenticação TLS é a Infraestrutura de Chave Pública (PKI) construída sobre certificados no formato X.509. Cada certificado contém: um nome de domínio (Common Name ou Subject Alternative Name), a chave pública do servidor, o nome do emissor (Autoridade Certificadora), uma data de validade e a assinatura digital da CA. O cliente verifica o certificado do servidor ao longo da cadeia de confiança: do certificado do servidor até a CA raiz, cujo certificado está embutido no sistema operacional. Em dispositivos Android, os certificados raiz são armazenados no keystore do sistema, atualizado via Google Play Services; no iOS — via atualizações do iOS. Se algum elo da cadeia for quebrado (certificado expirado, incompatibilidade de domínio, CA desconhecida), o cliente encerra a conexão. Para certificados autoassinados (usados em desenvolvimento), é necessária confiança explícita — no Android via Network Security Config, no iOS via NSExceptionDomains no Info.plist. O processo de validação da cadeia de certificados também inclui verificação de status de revogação através de CRL (Lista de Revogação de Certificados) ou OCSP (Protocolo de Status de Certificado Online), embora em dispositivos móveis as solicitações OCSP sejam frequentemente ignoradas para acelerar a conexão — este é um compromisso entre segurança e desempenho que os arquitetos devem considerar.
Embora os termos SSL e TLS sejam frequentemente usados como sinônimos, existem diferenças técnicas fundamentais entre eles que afetam a segurança e o desempenho de aplicativos móveis.
| Característica | SSL 3.0 | TLS 1.2 | TLS 1.3 |
|---|---|---|---|
| Ano de lançamento | 1996 | 2008 | 2018 |
| Status | Obsoleto (RFC 7568) | Ativo (recomendado) | Atual (melhor) |
| Viagens de ida e volta | 2 | 2 | 1 |
| Algoritmo de troca de chaves | RSA | RSA, ECDHE | ECDHE (apenas) |
| Criptografia autenticada | Não | GCM, CCM | AEAD obrigatório |
| Perfect Forward Secrecy | Não | Opcional | Obrigatório |
A principal diferença entre TLS 1.3 e seus antecessores é o uso obrigatório de Perfect Forward Secrecy (PFS) através do protocolo ECDHE. Isso significa que mesmo que um invasor obtenha acesso à chave privada do servidor, ele não poderá descriptografar o tráfego interceptado anteriormente. Para aplicativos móveis, onde o comprometimento do servidor é uma ameaça real, TLS 1.3 com PFS é um requisito de segurança obrigatório.
Versões antigas de SSL e TLS têm vulnerabilidades bem documentadas que as tornam inadequadas para uso em produção. POODLE (CVE-2014-3566) ataca SSL 3.0 através de um padding oracle, permitindo descriptografar cookies de sessão em 256 solicitações. BEAST (CVE-2011-3389) explora uma vulnerabilidade no modo CBC do TLS 1.0 através de um IV previsível. Heartbleed (CVE-2014-0160) — não é uma vulnerabilidade do protocolo, mas um bug na implementação do OpenSSL que permite ler a memória do servidor: de acordo com a Netcraft, mais de 500.000 servidores estavam vulneráveis em 2014. A partir do Android 10 (API 29) e iOS 13, todos esses protocolos estão desabilitados no nível do sistema. No entanto, os desenvolvedores devem verificar a configuração do servidor através do SSL Labs Test (qualys.com) antes de lançar um aplicativo para garantir que não haja conjuntos de cifra obsoletos e que TLS 1.3 seja suportado.
Em aplicativos móveis, o TLS protege os dados em três níveis: criptografia do conteúdo (ninguém exceto o servidor pode ler os dados), verificação de integridade (os dados não podem ser alterados em trânsito) e autenticação do servidor (o cliente tem certeza de que está se conectando ao servidor correto). A autenticação é especialmente crítica: sem ela, um invasor pode se passar pelo servidor através de falsificação de DNS ou um ponto de acesso Wi-Fi falso.
De acordo com um estudo do Google Play Protect (2024), 76% dos aplicativos Android usam TLS corretamente com verificação de certificados. Os 24% restantes cometem erros: desabilitam a verificação de certificados para testes (e esquecem de reabilitá-la em produção), usam certificados autoassinados sem validação ou permitem protocolos obsoletos como SSL 3.0 e TLS 1.0. O Apple App Transport Security (ATS) no iOS exige pelo menos TLS 1.2 desde 2017, e a partir do iOS 15, usa TLS 1.3 por padrão para todas as solicitações de rede. Para proteção adicional, também é recomendado implementar Certificate Pinning — vinculação a um certificado específico do servidor.
Vejamos um exemplo de configuração de uma conexão HTTPS segura no Android usando OkHttp — uma das bibliotecas de rede mais populares. Uma configuração adequada inclui forçar o uso de TLS 1.3 e verificação 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()
Neste exemplo, restringimos o conjunto de versões TLS suportadas apenas a 1.3 e 1.2, excluindo as obsoletas TLS 1.0/1.1. Os conjuntos de cifra são selecionados entre algoritmos modernos com modo AEAD e Perfect Forward Secrecy obrigatória. O HostnameVerifier verifica se o nome do host corresponde ao certificado. No iOS, uma configuração semelhante é feita através da configuração do URLSession com o parâmetro tlsMinimumSupportedProtocolVersion definido como .TLSv13. Adicionalmente, no iOS pode-se definir tlsMaximumSupportedProtocolVersion para limitar a versão superior — útil para compatibilidade com servidores legados que ainda não migraram para TLS 1.3. Essa configuração garante o máximo nível de segurança para transmissão de dados em um aplicativo móvel.
Perguntas Frequentes
TLS é uma versão mais nova e segura do protocolo. SSL está obsoleto e não deve ser usado (RFC 7568). Na prática, ambos os termos se referem à criptografia HTTPS, mas tecnicamente todos os sistemas modernos funcionam com TLS 1.2 ou 1.3.
Instale uma ferramenta proxy como Burp Suite ou Charles Proxy e intercepte o tráfego do aplicativo. Se a conexão usar HTTPS e o certificado for válido — o aplicativo usa TLS. Se o tráfego for por HTTP — não há criptografia.
Apenas TLS 1.2 e TLS 1.3 são permitidos para builds de produção. Os protocolos SSL 3.0, TLS 1.0 e TLS 1.1 devem ser desabilitados tanto no servidor quanto no aplicativo cliente. Desde 2020, as principais plataformas (Android, iOS, navegadores) exigem pelo menos TLS 1.2.
Sim, é recomendado. O TLS verifica o certificado através de uma cadeia de autoridades certificadoras, mas se alguma CA for comprometida (como aconteceu com DigiNotar em 2011), um invasor pode emitir um certificado falso. O Pinning adiciona uma camada extra de verificação.
TLS 1.3 reduz o tempo de estabelecimento de conexão de 2 viagens de ida e volta para 1, proporcionando uma melhoria de 30–50% na primeira conexão. Para aplicativos móveis com conexões instáveis (metrô, trens), isso é criticamente importante para a velocidade de carregamento de dados.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também