Protocolo de handshake TLS

O Protocolo de Handshake TLS ( Transport Layer Security ) é responsável pela autenticação e troca de chaves necessária para estabelecer ou retomar sessões seguras. Ao estabelecer uma sessão segura, o Protocolo handshake gerencia o seguinte:

  • Negociação do pacote de criptografia
  • Autenticação do servidor e, opcionalmente, do cliente
  • Troca de informações de chave de sessão.

Negociação do Pacote de Criptografia

O cliente e o servidor fazem contato e escolhem o conjunto de criptografias que será usado durante a troca de mensagens.

Autenticação

No TLS, um servidor prova sua identidade para o cliente. O cliente também pode precisar provar sua identidade para o servidor. A PKI, o uso de pares de chaves públicas/privadas, é a base dessa autenticação. O método exato usado para autenticação é determinado pelo conjunto de criptografias negociado.

Troca de Chaves

O cliente e o servidor trocam números aleatórios e um número especial chamado Segredo Pré-Mestre. Esses números são combinados com dados adicionais que permitem que o cliente e o servidor criem seu segredo compartilhado, chamado segredo mestre. O Segredo Mestre é usado pelo cliente e pelo servidor para gerar o segredo MAC de gravação, que é a chave de sessão usada para hash e a chave de gravação, que é a chave de sessão usada para criptografia.

Estabelecendo uma sessão segura usando TLS

O Protocolo de Handshake TLS envolve as seguintes etapas:

  1. O cliente envia uma mensagem "Olá cliente" para o servidor, juntamente com o valor aleatório do cliente e conjuntos de criptografia com suporte.
  2. O servidor responde enviando uma mensagem "Server hello" para o cliente, juntamente com o valor aleatório do servidor.
  3. O servidor envia seu certificado ao cliente para autenticação e pode solicitar um certificado do cliente. O servidor envia a mensagem "Servidor olá concluído".
  4. Se o servidor solicitou um certificado do cliente, o cliente o enviará.
  5. O cliente cria um segredo pré-mestre aleatório e o criptografa com a chave pública do certificado do servidor, enviando o segredo pré-mestre criptografado para o servidor.
  6. O servidor recebe o segredo pré-mestre. O servidor e o cliente geram cada um o Segredo Mestre e as chaves de sessão com base no Segredo Pré-Mestre.
  7. O cliente envia a notificação "Alterar especificação de criptografia" para o servidor para indicar que o cliente começará a usar as novas chaves de sessão para mensagens de hash e criptografia. O cliente também envia a mensagem "Cliente concluído".
  8. O servidor recebe "Alterar especificação de criptografia" e alterna seu estado de segurança da camada de registro para criptografia simétrica usando as chaves de sessão. O servidor envia a mensagem "Servidor concluído" para o cliente.
  9. O cliente e o servidor agora podem trocar dados do aplicativo pelo canal seguro que eles estabeleceram. Todas as mensagens enviadas do cliente para o servidor e do servidor para o cliente são criptografadas usando a chave de sessão.

Retomando uma sessão segura usando TLS

  1. O cliente envia uma mensagem "Client hello" usando a ID da sessão a ser retomada.

  2. O servidor verifica seu cache de sessão para obter uma ID de Sessão correspondente. Se uma correspondência for encontrada e o servidor puder retomar a sessão, ele enviará uma mensagem "Server hello" com a ID da Sessão.

    Observação

    Se uma correspondência de ID de sessão não for encontrada, o servidor gerará uma nova ID de sessão e o cliente e o servidor TLS executarão um handshake completo.

     

  3. O cliente e o servidor devem trocar mensagens "Alterar especificação de criptografia" e enviar mensagens "Cliente concluído" e "Servidor concluído".

  4. O cliente e o servidor agora podem retomar a troca de dados do aplicativo pelo canal seguro.