Implicações funcionais das diferenças em SSL e TLS


31

Sei que o TLS é essencialmente uma versão mais recente do SSL e que geralmente oferece suporte à transição de uma conexão de não segura para segura (geralmente por meio de um comando STARTTLS).

O que não entendo é por que o TLS é importante para um profissional de TI e por que, dada a escolha, eu escolheria um sobre o outro. O TLS é realmente apenas uma versão mais recente e, em caso afirmativo, é um protocolo compatível?

Como profissional de TI: quando uso qual? Quando não uso qual?

Respostas:


44

Resposta curta:

O SSL é o precursor do TLS. O SSL era um protocolo proprietário desenvolvido pela Netscape Communications, posteriormente padronizado no IETF e renomeado como TLS. Em resumo, as versões estão nesta ordem: SSLv2, SSLv3, TLSv1.0, TLSv1.1 e TLSv1.2.

Ao contrário de uma crença relativamente ampla, não se trata de ter que executar um serviço em uma porta distinta com SSL e poder estar na mesma porta que a variante de texto sem formatação do TLS. SSL e TLS podem ser usados ​​para as duas abordagens. Trata-se da diferença entre SSL / TLS na conexão (às vezes chamado de "SSL / TLS implícito") e SSL / TLS após a emissão de um comando no nível do protocolo, geralmente STARTTLS(às vezes chamado de "SSL / TLS explícito") . A palavra-chave STARTTLSé "INICIAR", não TLS. É uma mensagem, no nível do protocolo do aplicativo, para indicar que é necessário mudar para SSL / TLS, se não tiver sido iniciado antes da troca do protocolo do aplicativo.

O uso de ambos os modos deve ser equivalente, desde que o cliente esteja configurado para esperar SSL / TLS de uma maneira ou de outra, para não ser rebaixado para uma conexão de texto sem formatação.

Resposta mais longa:

SSL vs TLS

Tanto quanto sei, o SSLv1 nunca saiu dos laboratórios. SSLv2 e SSLv3 foram protocolos desenvolvidos pela Netscape. O SSLv2 é considerado inseguro há algum tempo, pois é propenso a fazer downgrade de ataques. O SSLv3 usa internamente (3,0)como seu número de versão (na ClientHellomensagem).

TLS é o resultado da padronização como um protocolo mais aberto no IETF. (Acho que li em algum lugar, talvez no livro de E. Rescorla, que o nome foi escolhido de tal forma que todos os participantes ficaram igualmente descontentes com ele, para não favorecer uma empresa em particular: essa é uma prática bastante comum em padrões. .) Os interessados ​​em como a transição foi realizada podem ler as Perguntas frequentes sobre a lista de discussão SSL ; existem várias cópias deste documento, mas a maioria dos links (para ) está desatualizada.netscape.com

O TLS usa mensagens muito semelhantes (suficientemente diferentes para tornar os protocolos incompatíveis, embora seja possível negociar uma versão comum ). Os TLS 1.0 , 1.1 e 1.2 ClientHello mensagens usar (3,1), (3,2), (3,3)para indicar o número da versão, o que mostra claramente a continuação da SSL.

Há mais detalhes sobre as diferenças de protocolo nesta resposta .

Quando uso qual? Quando não uso qual?

Use a versão mais alta possível, se possível. Na prática, como provedor de serviços, isso exigirá que seus usuários tenham clientes que suportam essas versões. Como sempre, é sempre um exercício de avaliação de risco (de preferência com um caso de negócios, se apropriado). Dito isto, corte o SSLv2 de qualquer maneira.

Além disso, observe que a segurança fornecida pelo SSL / TLS não é apenas sobre qual versão você usa, mas também sobre a configuração adequada: certamente é preferível usar o SSLv3 com um conjunto de cifras forte do que o TLSv1.0 com um com um valor fraco (ou criptografia anônima / nula). Alguns conjuntos de cifras, considerados muito fracos, foram explicitamente proibidos por versões mais recentes do TLS. As tabelas no provedor Java 7 SunJSSE (e suas notas de rodapé) podem ser de interesse se você desejar obter mais detalhes.

Seria preferível usar o TLS 1.1 pelo menos, mas nem todos os clientes ainda os suportam infelizmente (por exemplo, Java 6). Ao usar uma versão sob 1.1, certamente vale a pena atenuar a vulnerabilidade do BEAST .

Eu geralmente recomendaria o livro de Eric Rescorla - SSL e TLS: projetando e construindo sistemas seguros, Addison-Wesley, 2001 ISBN 0-201-61598-3 para pessoas que realmente querem mais detalhes.

SSL / TLS implícito vs explícito

Existe um mito dizendo que o TLS permite que você use a mesma porta, enquanto o SSL não pode. Isso simplesmente não é verdade (e deixarei de fora a unificação de portas para esta discussão). Infelizmente, esse mito parece ter sido propagado para os usuários pelo fato de que alguns aplicativos como o MS Outlook às vezes oferecem uma escolha entre SSL e TLS em suas opções de configuração, quando na verdade significam uma escolha entre SSL / TLS implícito e explícito. (Existem especialistas em SSL / TLS na Microsoft, mas parece que eles não estavam envolvidos na interface do usuário do Outlook.)

Eu acho que a razão pela qual essa confusão acontece é por causa do STARTTLSmodo. Parece que algumas pessoas entenderam isso como STARTTLS= TLS, mas esse não é o caso. A palavra-chave STARTTLSé "INICIAR", não TLS. Por que isso não foi chamado STARTSSLou STARTSSLORTLSé porque essas extensões foram especificadas no IETF, que usava apenas nomes usados ​​em suas especificações (assumindo que o nome TLS acabaria sendo o único em pé, eu acho).

  • SSL na mesma porta que o serviço de texto sem formatação: proxy HTTPS.

Atualmente, a maioria dos servidores HTTPS pode lidar com TLS, mas alguns anos atrás, a maioria das pessoas estava usando SSLv3 para HTTPS. HTTPS (estritamente falando, padronizado como HTTP sobre TLS ) normalmente estabelece a conexão SSL / TLS na conexão TCP e depois troca a mensagem HTTP pela camada SSL / TLS. Há uma exceção a isso ao usar um proxy HTTP no meio. Nesse caso, o cliente se conecta ao proxy HTTP de forma clara (normalmente na porta 3128), emite o CONNECTcomando HTTP e, desde que a resposta tenha sido bem-sucedida, inicia o handshake SSL / TLS enviando umClientHellomensagem. Tudo isso acontece na mesma porta no que diz respeito à conexão entre o navegador e o proxy (obviamente não entre o proxy e o servidor de destino: não é nem a mesma máquina). Isso funciona muito bem com o SSLv3. Muitos de nós, em situações atrás de um proxy, terão usado isso em servidores que não suportam pelo menos TLS 1.0.

  • SSL na mesma porta que o serviço de texto sem formatação: email.

Este está claramente fora das especificações, mas, na prática, geralmente funciona. A rigor, as especificações falam sobre a mudança para TLS (não SSL) após o uso do comando STARTTLS. Na prática, o SSL geralmente também funciona (assim como a especificação "HTTP sobre TLS" também abrange o uso do SSL em vez do TLS). Você pode tentar sozinho. Supondo que você tenha um servidor SMTP ou IMAP compatível com STARTTLS, use o Thunderbird, entre nas preferências, opções avançadas, editor de configuração e desligue security.enable_tls. Muitos servidores ainda aceitarão a conexão, simplesmente porque suas implementações delegam a camada SSL / TLS a uma biblioteca SSL / TLS que geralmente poderá lidar com SSL e TLS da mesma maneira, a menos que configurado para não fazê-lo. Como o FAQ do OpenLDAP coloca, "Embora o mecanismo seja projetado para uso com o TLSv1, a maioria das implementações se reserva no SSLv3 (e SSLv2), se necessário. ". Se você não tiver certeza, verifique com uma ferramenta como o Wireshark.

  • TLS em uma porta distinta.

Muitos clientes podem usar o TLS 1.0 (pelo menos) para protocolos em que a variante segura está em uma porta diferente. Obviamente, há vários navegadores e servidores da Web que suportam TLS 1.0 (ou superior) para HTTPS. Da mesma forma, SMTPS, IMAPS, POPS e LDAPS também podem usar TLS. Eles não estão limitados ao SSL.

Quando uso qual? Quando não uso qual?

Entre SSL / TLS explícito e implícito, isso realmente não importa. O que importa é que seu cliente saiba o que esperar e esteja configurado adequadamente para fazê-lo. Mais importante, ele deve ser configurado para rejeitar conexões de texto sem formatação quando espera uma conexão SSL / TLS, implícita ou explícita .

A principal diferença entre SSL / TLS explícito e implícito estará na clareza das configurações.

Por exemplo, para LDAP, se o cliente for um servidor Apache Httpd ( mod_ldap- sua documentação também identifica incorretamente a diferença entre SSL e TLS, infelizmente), você pode usar SSL / TLS implícito usando uma ldaps://URL (por exemplo AuthLDAPURL ldaps://127.0.0.1/dc=example,dc=com?uid?one) ou usar SSL / TLS usando um parâmetro extra (por exemplo AuthLDAPURL ldap://127.0.0.1/dc=example,dc=com?uid?one TLS).

Há, talvez, de um modo geral um risco ligeiramente menor ao especificar o protocolo de segurança no esquema URL ( https, ldaps...) do que quando esperando o cliente para configurar uma configuração adicional para habilitar SSL / TLS, porque eles podem esquecer. Isso é discutível. Também pode haver problemas na correção da implementação de um contra o outro (por exemplo, acho que o cliente Java LDAP não suporta verificação de nome de host ao usar ldaps://, quando deveria, enquanto é suportado com ldap://+ StartTLS).

Na dúvida, e para ser compatível com mais clientes, se possível, não parece prejudicar oferecer ambos os serviços quando o servidor o suportar (o servidor apenas escutará em duas portas ao mesmo tempo). Muitas implementações de servidor para protocolos que podem ser usados ​​com ambos os modos suportam ambos.

É de responsabilidade do cliente não se deixar fazer o downgrade para uma conexão de texto sem formatação. Como administrador de servidor, não há nada que você possa fazer tecnicamente do seu lado para impedir ataques de downgrade (além de exigir um certificado de cliente, talvez). O cliente deve verificar se o SSL / TLS está ativado, seja na conexão ou após um STARTTLScomando-like. Da mesma forma que um navegador não deve ser redirecionado de https://para http://, um cliente para um protocolo que suporte STARTTLS deve garantir que a resposta seja positiva e que a conexão SSL / TLS esteja ativada antes de prosseguir. Caso contrário, um invasor MITM ativo poderia facilmente fazer o downgrade de ambas as conexões.

Por exemplo, versões anteriores do Thunderbird tinham uma opção ruim para isso chamada "Usar TLS, se disponível" , o que implicava essencialmente que, se um invasor do MITM pudesse alterar as mensagens do servidor para não anunciar suporte para STARTTLS, o cliente silenciosamente seria rebaixado para uma conexão de texto sem formatação. (Esta opção não segura não está mais disponível no Thunderbird.)


3
Obrigado por postar não apenas uma resposta abrangente, mas uma resposta correta com fontes. +1 de mim.

13

O TLS é um protocolo mais recente que o SSL (mas o AFAIK, é compatível com SSL v3). Geralmente, há apenas uma diferença com a qual você precisa se preocupar:

Um protocolo com SSL geralmente possui uma porta separada - por exemplo, 80 para HTTP e 443 para HTTPS (HTTP / SSL). Quando você se conecta à porta SSL, a sessão inteira é criptografada.

O TLS é mais recente que o SSL e não requer uma porta separada. Em vez disso, deve ser negociado pelo cliente. Por exemplo, você pode executar o IMAP na porta 143 e, se o servidor de email e o cliente suportarem TLS, o cliente enviará um STARTTLScomando e só então ativará a criptografia. Dessa forma, você não precisa de uma porta somente SSL separada, mantendo-se compatível com aplicativos sem SSL.

Resumo:
SSL : um pouco mais antigo. Portas separadas para conexões simples e criptografadas. Todo o tráfego na porta SSL é sempre criptografado.
TLS : Porta única para conexões simples e criptografadas. A criptografia é ativada somente após o cliente emitir um STARTTLScomando.


Mas quando devo usar qual?
Randell

3
O fato de usar STARTTLSem alguns protocolos permitir mudar para TLS na mesma conexão não faz diferença entre SSL e TLS. Tecnicamente, você pode mudar para SSLv3 da mesma maneira.
Bruno

9
Infelizmente, esta resposta está incorreta. Mais uma vez, TLS vs SSL não é uma porta versus portas separadas: security.stackexchange.com/q/5126/2435
Bruno

11
Incorreta. -1 voto
Tatas


8

Neste artigo da Base de Conhecimento da Universidade de Indiana :

SSL significa Secure Sockets Layer. A Netscape originalmente desenvolveu esse protocolo para transmitir informações em particular, garantir a integridade da mensagem e garantir a identidade do servidor. O SSL funciona principalmente através do uso de criptografia de chave pública / privada nos dados. É comumente usado em navegadores da Web, mas o SSL também pode ser usado com servidores de email ou qualquer tipo de transação cliente-servidor. Por exemplo, alguns servidores de mensagens instantâneas usam SSL para proteger conversas.

TLS significa Transport Layer Security. A Internet Engineering Task Force (IETF) criou o TLS como sucessor do SSL. Geralmente é usado como uma configuração em programas de email, mas, como o SSL, o TLS pode desempenhar um papel em qualquer transação cliente-servidor.

As diferenças entre os dois protocolos são muito pequenas e muito técnicas, mas são padrões diferentes. O TLS usa algoritmos de criptografia mais fortes e tem a capacidade de trabalhar em portas diferentes. Além disso, o TLS versão 1.0 não interopera com o SSL versão 3.0.


2
A partir daqui: kb.iu.edu/data/anjv.html
jjnguy

4

TLS é a versão mais recente do SSL. Embora em alguns lugares essas palavras possam significar algo além de apenas protocolos, esclareça sua pergunta.


O OP já declarou que o TLS é uma versão mais recente do SSL. O restante da sua postagem é um comentário. Não é uma resposta.
user207421

@EJP: você percebeu que a resposta tem> 3 anos?
user9517 suporta GoFundMonica

(Gostaria de saber se mesmo um ♦ -mod pode editar a pergunta de outro usuário para adicionar "Eu sei que ..." que não é aplicável para o usuário original)
wRAR

11
@EJP, para ser justo com a wRAR, a edição desta pergunta foi objeto de longos debates (veja aqui e aqui ). Evidentemente, nada disso é imediatamente visível sem examinar a história. (Note-se que esta edição foi feita por um mod ...)
de Bruno
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.