Quais são as diferenças exatas no nível do protocolo entre SSL e TLS?

40

Este é um mergulho técnico profundo depois que essa pergunta geral foi feita.

Quais são as diferenças de protocolo entre SSL e TLS?
Existe realmente uma diferença suficiente para justificar uma mudança de nome? (em vez de chamá-lo de "SSLv4" ou SSLv5 para as versões mais recentes do TLS)

goodguys_activate
fonte
3
Eu suspeito que, se você quiser uma compreensão realmente profunda, precisará começar a ler as especificações. Confira a página da wiki . Inclui links para as RFCs e especificações.
Zoredache
7
@ Zoredache, por favor, não use "wiki" como abreviação de "Wikipedia".
Spiff

Respostas:

36

SSLv2 e SSLv3 são completamente diferentes (e agora ambos são considerados inseguros). SSLv3 e TLSv1.0 são muito semelhantes, mas têm algumas diferenças.

Você pode considerar o TLSv1.0 como SSLv3.1 (de fato, é o que acontece nos registros trocados). É mais fácil comparar o TLSv1.0 com o TLSv1.1 e o TLSv1.2 porque todos foram editados no IETF e seguem mais ou menos a mesma estrutura. Sendo o SSLv3 editado por uma instituição diferente (Netscape), fica um pouco mais difícil identificar as diferenças.

Aqui estão algumas diferenças, mas duvido que possa listar todas elas:

  • Na ClientHellomensagem (primeira mensagem enviada pelo cliente, para iniciar o handshake), a versão é {3,0}para SSLv3, {3,1}TLSv1.0 e {3,2}TLSv1.1.
  • O ClientKeyExchangedifere.
  • O MAC / HMAC é diferente (o TLS usa o HMAC, enquanto o SSL usa uma versão anterior do HMAC).
  • A derivação da chave é diferente.
  • Os dados do aplicativo cliente podem ser enviados imediatamente após o envio da Finishedmensagem SSL / TLS no SSLv3. No TLSv1, ele deve aguardar a Finishedmensagem do servidor .
  • A lista de conjuntos de cifras é diferente (e alguns deles foram renomeados de SSL_*para TLS_*, mantendo o mesmo número de identificação).
  • Também existem diferenças em relação à nova extensão de renegociação .

Eu recomendaria fortemente o livro de Eric Rescorla - SSL e TLS: projetando e construindo sistemas seguros , Addison-Wesley, 2001 ISBN 0-201-61598-3 , 2001 , se você realmente quiser mais detalhes. Eu aprendi sobre alguns dos pontos mencionados acima neste livro. Ocasionalmente, o autor menciona as diferenças entre SSLv3 e TLS (v1.0 somente no momento em que o livro foi escrito) ao explicar algumas das mensagens SSL / TLS, mas você precisa da explicação em segundo plano sobre essas mensagens para ter uma chance de entender ( e não é apropriado copiar / colar este livro aqui).

Bruno
fonte
Parece que as extensões TLS se aplicam apenas ao TLS e não ao SSL, correto? Assim, por exemplo, os clientes TLS podem enviar um ClientHelloregistro " " estendido , enquanto os clientes somente SSL3 apenas enviariam o original " ClientHello".
culix
@culix, de um modo geral, isso é realmente correto (principalmente porque as extensões TLS são definidas na estrutura do IETF). O SSLv3 também conseguiu ter dados extras em seu registro ClientHello (o mesmo que TLS 1.0 e 1.1). (Procure draft302.txte " No interesse da compatibilidade direta ... ", compare com as seções 7.4.1.2 nas especificações do TLS). Para lidar com pilhas que não suportam isso, também existem soluções alternativas, como o pseudo-conjunto de códigos SCSV na extensão de renegociação.
246 Bruno Bruno
@Bruno, Reserve o link para baixo .....
Pacerier
4

Apenas ecoarei as outras respostas, mas talvez com uma ênfase um pouco diferente.

Havia um protocolo de soquetes seguros "pertencente" ao Netscape chamado SSL versão 2. Uma nova versão com uma estrutura de registro diferente e melhorias de segurança também "pertencentes" ao Netscape foi lançada e denominada SSL versão 3. Dentro do protocolo em vários places é um campo de número de versão binária. Para o SSL versão 3, esse campo é definido como 0x03 0x00, ou seja, versão 3.0. Então o IETF decidiu criar seu próprio padrão. Possivelmente porque havia algumas incertezas de propriedade intelectual sobre SSL, incluindo se "SSL" era uma marca comercial da Netscape, quando a IETF lançou a próxima versão deste protocolo, eles deram seu próprio nome: Protocolo de segurança de camada de transporte ou TLS versão 1.0. O formato do registro e a estrutura geral são idênticos e consistentes com o SSL v3. O número da versão binária foi alterado para 0x03 0x01 e, como outros observaram, houve algumas pequenas alterações de criptografia. Desde então, existe a versão 1.1 e 1.2 do TLS, para a qual os números de protocolo interno são 0x03 0x02 e 0x03 0x03.

Ignorando o SSLv2, foi basicamente apenas uma mudança de nome, juntamente com o ajuste fino do protocolo normal, que ocorre quando as pessoas ficam mais inteligentes sobre segurança e desempenho.

James Reinstate Monica Polk
fonte
3

Fundamentalmente, é apenas uma alteração de nome para uma versão mais recente do protocolo. Acredito que o principal motivo disso foi diferenciá-lo do padrão informal mais antigo, projetado principalmente pela Netscape depois que ele se tornou um protocolo oficial de rastreamento de padrões da IETF.

Como foi dito nas respostas à sua pergunta anterior, isso não significa que o SSLv3 e o TLSv1.0 sejam compatíveis. Citando a RFC 2246:

as diferenças entre esse protocolo e o SSL 3.0 não são dramáticas, mas são significativas o suficiente para que o TLS 1.0 e o SSL 3.0 não interoperem.

Eu acho que se você realmente quer saber as diferenças exatas nos protocolos, deve ler os padrões e se comparar.

Rascunho do protocolo SSLv3 do Netscape TLSv1.0 RFC 2246

Sven
fonte
@SvenW Gostaria de comparar por mim mesmo, mas é um grande desafio que não tenho certeza se quero assumir. Esse padrão existe há 10 anos. Certamente alguém já fez a comparação, com gráficos bonitos, para que caras como eu possam entender.
goodguys_activate
@ MakerOfThings7 Infelizmente, esta pergunta não é algo que possa ser resumido em um gráfico de pizza. As únicas coisas que podem ser colocadas em um gráfico são as taxas de bits de criptografia ou (e eu estou expandindo aqui) o nível de segurança concedido (onde SSLv3 é "-" e TLS é "=" ...). ser adquirida pode ser tido por realmente ler as especificações, ou pelo menos a página da Wikipedia (que eu fornecido a você na pergunta anterior.)
gWaldo
@SvenW Você já leu e entendeu as duas especificações?
goodguys_activate
Não. Por que eu deveria? Não sou desenvolvedor desenvolvendo software contra essa especificação, que é o único motivo para fazer isso. Se eu precisar usar SSL / TLS, li o documento para OpenSSL etc., suficiente para usuários e administradores.
Sven
@SvenW Sem ofensas, mas vou manter isso em aberto até receber uma resposta de alguém que leu e entendeu as especificações ... o que é razoável, dada a minha pergunta.
goodguys_activate
0

O protocolo de criptografia SSL agora é chamado de TLS, resultando em dois nomes para o mesmo protocolo. O software atual negociará o TLS versão 1 ou SSL versão 3 automaticamente. Os seres humanos, por outro lado, precisam decidir entre usar o termo SSL mais reconhecível versus a designação TLS oficial.

O SSL é o antecessor do TLS.

O TLS e o SSL criptografam os segmentos das conexões de rede na camada de aplicativos para garantir o trânsito seguro de ponta a ponta na camada de transporte.

aleroot
fonte
Então é uma mudança de nome? É isso aí?
goodguys_activate
sim TLS é a versão mais recente, TLS pode se transformar em SSL3, se necessário.
aleroot 6/09/10
3
Não, não é uma mudança de nome. O TLSv1 é interoperável com o SSLv3 (e será utilizado como substituto), mas isso não é necessariamente verdade o contrário. TLSv1 é como SSLv4. Nota: também há várias versões do TLS.
Philip Reynolds
-2

Diferenças:

  • O TLS é executado em cima de um protocolo padrão. Uma conexão TLS inicia como uma sessão não criptografada de um serviço padrão, mas em algum momento eles começam a negociar a criptografia. Requer a extensão do protocolo padrão para esta negociação.
  • Protocolos padrão executados sobre SSL. Uma conexão SSL primeiro negocia a criptografia e, em seguida, executa o protocolo básico sobre ela.
LatinSuD
fonte
Isso não está correto, você está falando da diferença entre iniciar com SSL / TLS e alternar para TLS dentro do protocolo por meio de comandos como STARTTLS: stackoverflow.com/questions/3660798/…
Bruno