O que é um handshake TLS?
TLS é um protocolo de criptografia desenvolvido para proteger as comunicações pela internet. Handshake TLS é o processo que dá início a uma sessão de comunicação que utiliza TLS. Durante um handshake TLS, os dois lados que estão se comunicando trocam mensagens para reconhecer um ao outro, verificar um ao outro, estabelecer os algoritmos de criptografia que irão usar e concordar com as chaves de sessão. Os handshakes TLS são uma parte fundamental de como o HTTPS funciona.
Handshakes TLS x handshakes SSL
SSL, ou Secure Sockets Layer, era o protocolo de segurança original desenvolvido para HTTP. O SSL foi substituído pelo TLS, ou Transport Layer Security, há algum tempo. Os handshakes SSL agora são chamados de handshakes TLS, embora o nome "SSL" ainda seja amplamente utilizado.
Artigo
Maximize o poder do TLS
Guia
O guia Zero Trust para proteger o acesso a aplicativos
Quando ocorre um handshake TLS?
Um handshake TLS ocorre sempre que um usuário navega para um site pelo HTTPS e o navegador começa a consultar primeiro o servidor de origem do site. Um handshake TLS também acontece sempre que qualquer outra comunicação utiliza HTTPS, incluindo chamadas de API e consultas DNS sobre HTTPS.
Os handshakes TLS ocorrem após a abertura de uma conexão TCP por meio de um handshake TCP.
SSL seguro
SSL gratuito incluído em qualquer plano da Cloudflare
O que acontece durante um handshake TLS
Durante um handshake TLS, o cliente e o servidor juntos farão o seguinte:
- Especificarão qual versão do TLS (TLS 1.0, 1.2, 1.3, etc.) irão usar
- Decidirão quais conjuntos de cifras (ver abaixo) serão utilizados
- Autenticarão a identidade do servidor por meio da chave pública do servidor e da assinatura digital da autoridade de certificação SSL
- Gerarão chaves de sessão a fim de usar criptografia simétrica após a realização do handshake
Quais são os passos de um handshake TLS?
Os handshakes TLS são uma série de datagramas, ou mensagens, trocadas por um cliente e um servidor. Um handshake TLS envolve várias etapas, já que o cliente e o servidor trocam as informações necessárias para completar o handshake e permitir a continuação da conversa.
Os passos exatos de um handshake TLS irão variar dependendo do tipo de algoritmo de troca de chaves utilizado e dos conjuntos de cifras compatíveis com os dois lados. O algoritmo de troca de chaves RSA, embora não seja considerado seguro agora, foi usado em versões de TLS antes da 1.3. Ele funciona mais ou menos assim:
- A mensagem "olá cliente": O cliente inicia o handshake enviando uma mensagem de "olá" para o servidor. A mensagem incluirá a versão TLS compatível com o cliente, os conjuntos de cifras compatíveis e uma string de bytes aleatórios conhecidos como "cliente aleatório".
- A mensagem "olá servidor": Em resposta à mensagem "olá cliente", o servidor envia uma mensagem contendo o certificado SSL do servidor, o conjunto de cifras escolhido pelo servidor e o "servidor aleatório", outra string aleatória de bytes gerada pelo servidor.
- Autenticação: O cliente verifica o certificado SSL do servidor com a autoridade de certificação que o emitiu. Isto confirma que o servidor é quem ele diz ser e que o cliente está interagindo com o verdadeiro proprietário do domínio.
- O segredo pré-mestre: O cliente envia mais uma string aleatória de bytes, o "segredo pré-mestre". O segredo pré-mestre é criptografado com a chave pública e só pode ser descriptografado pelo servidor com a chave privada. (O cliente recebe a chave pública do certificado SSL do servidor).
- Chave privada utilizada: O servidor descriptografa o segredo pré-mestre.
- Chaves de sessão criadas: Tanto o cliente quanto o servidor geram chaves de sessão do cliente aleatório, do servidor aleatório e do segredo pré-mestre. Elas devem chegar aos mesmos resultados.
- O cliente está pronto: O cliente envia a mensagem "finalizado" que é criptografada com uma chave de sessão.
- O servidor está pronto: O servidor envia a mensagem "finalizado" criptografada com uma chave de sessão.
- Criptografia simétrica segura alcançada: O handshake é concluído e a comunicação continua mediante o uso das chaves de sessão.
Todos os handshakes TLS utilizam criptografia assimétrica (a chave pública e privada), mas nem todos usarão a chave privada no processo de geração das chaves de sessão. Por exemplo, um handshake efêmero Diffie-Hellman procede da seguinte forma:
- Olá cliente: O cliente envia uma mensagem de "olá" com a versão do protocolo, o cliente aleatório e uma lista de conjuntos de cifras.
- Olá servidor: O servidor responde com seu certificado SSL, seu conjunto de cifras selecionado e o servidor aleatório. Em comparação com o handshake RSA descrito acima, nesta mensagem o servidor também inclui o seguinte (passo 3):
- Assinatura digital do servidor: o servidor calcula uma assinatura digital de todas as mensagens até este ponto.
- Assinatura digital confirmada: o cliente verifica a assinatura digital do servidor, confirmando que o servidor é quem ele diz ser.
- Parâmetro DH do cliente: o cliente envia seu parâmetro DH para o servidor.
- Cliente e servidor calculam o segredo pré-mestre: Em vez de o cliente gerar o segredo pré-mestre e enviá-lo para o servidor, como em um handshake RSA, o cliente e o servidor usam os parâmetros DH que trocaram para calcular separadamente um segredo pré-mestre correspondente.
- Chaves de sessão criadas: Agora, o cliente e o servidor calculam as chaves de sessão do segredo pré-mestre, do cliente aleatório e do servidor aleatório, exatamente como em um handshake RSA.
- O cliente está pronto: o mesmo que um handshake RSA
- O servidor está pronto
- Criptografia simétrica segura alcançada
*Parâmetro DH: DH significa Diffie-Hellman. O algoritmo Diffie-Hellman usa cálculos exponenciais para chegar ao mesmo segredo pré-mestre. O servidor e o cliente fornecem cada um um parâmetro para o cálculo e, quando combinados, resultam em um cálculo diferente em cada lado, com resultados iguais.
Para ler mais sobre a diferença entre handshakes efêmeros Diffie-Hellman e outros tipos de handshakes, e como eles efetuam o sigilo encaminhado, veja O que é Keyless SSL?
O que há de diferente em um handshake no TLS 1.3?
O TLS 1.3 não é compatível com RSA, nem outros conjuntos de cifras e parâmetros que são vulneráveis a ataques. Ele também encurta o handshake TLS, tornando um handshake TLS 1.3 mais rápido e seguro.
As etapas básicas de um handshake TLS 1.3 são:
- Client Hello: O cliente envia uma mensagem "Hello" com a versão do protocolo, o cliente aleatório e uma lista de conjuntos de cifras.Como o suporte para conjuntos de codificação inseguros foi removido do TLS 1.3, o número de conjuntos de codificação possíveis foi bastante reduzido.O "Client Hello" também inclui os parâmetros que serão usados para calcular o "segredo pré-mestre".Essencialmente, o cliente assume que conhece o método de troca de chaves preferido do servidor (o que, devido à lista simplificada de conjuntos de cifras, ele provavelmente conhece).Isso reduz o comprimento total do handshake — uma das diferenças importantes entre os handshakes TLS 1.3 e os handshakes TLS 1.0, 1.1 e 1.2.
- O servidor gera o "segredo mestre": neste ponto, o servidor recebeu o cliente aleatório e os parâmetros e os conjuntos de cifras do cliente.Ele já tem o servidor aleatório, uma vez que pode gerar isso por si só.Portanto, o servidor pode criar o segredo mestre.
- "Server Hello" e "Finalizado": o "Server Hello" inclui o certificado do servidor, assinatura digital, servidor aleatório e conjunto de cifras escolhido.Como já tem o segredo mestre, também envia a mensagem "Finalizado".
- Etapas finais e "Finalizado" do cliente: o cliente verifica a assinatura e o certificado, gera o segredo mestre e envia a mensagem "Finalizado".
- Criptografia simétrica segura alcançada
Modo 0-RTT para retomada da sessão
O TLS 1.3 também oferece suporte a uma versão ainda mais rápida do handshake TLS que não requer nenhuma viagem de ida e volta ou comunicação de ida e volta entre cliente e servidor. Se o cliente e o servidor tiverem se conectado um ao outro antes (por exemplo, se o usuário tiver visitado o site antes), cada um deles poderá derivar outro segredo compartilhado da primeira sessão, chamado de "segredo principal de retomada". O servidor também envia ao cliente algo chamado ticket de sessão durante esta primeira sessão. O cliente pode usar esse segredo compartilhado para enviar dados criptografados para o servidor em sua primeira mensagem da próxima sessão, junto com esse ticket de sessão. E o TLS é retomado entre o cliente e o servidor.
O que é um conjunto de cifras?
Um conjunto de cifras é um conjunto de algoritmos para uso no estabelecimento de uma conexão de comunicação segura. Há uma série de conjuntos de cifras que são amplamente utilizados e uma parte essencial do handshake TLS é concordar sobre qual conjunto de cifras será usado para aquele handshake.
Para saber mais sobre TLS/SSL, consulte Como funciona o SSL?