Implementação

1. Iniciação do Handshake: - O cliente envia uma mensagem "ClientHello" ao servidor, indicando as versões do SSL/TLS que ele suporta, algoritmos de criptografia e outras informações relevantes. - O servidor responde com uma mensagem "ServerHello", selecionando uma versão de protocolo e um conjunto de parâmetros de criptografia que ambos o cliente e o servidor suportam.

2. Autenticação do Servidor: - O servidor envia seu certificado digital, que inclui sua chave pública e outras informações, ao cliente. - O cliente verifica a autenticidade do certificado, garantindo que ele seja emitido por uma autoridade confiável e que o nome do domínio corresponda ao que está sendo acessado. - Se a verificação for bem-sucedida, o cliente gera uma "premaster secret" (um segredo compartilhado) e a criptografa com a chave pública do servidor, enviando-a de volta ao servidor.

3. Negociação de Parâmetros de Sessão: - O cliente e o servidor concordam em uma série de parâmetros de sessão, incluindo algoritmos de criptografia, métodos de compressão, entre outros. Esses parâmetros serão usados para proteger a comunicação subsequente.

4. Gerador de Chaves de Sessão: - Usando a "premaster secret" compartilhada, o cliente e o servidor derivam chaves de criptografia simétrica para a sessão atual. Essas chaves serão usadas para criptografar e descriptografar os dados durante a comunicação.

5. Confirmação do Handshake: - O servidor envia uma mensagem "ServerHelloDone" para indicar que o handshake está concluído do lado do servidor. - O cliente responde com uma mensagem "ClientKeyExchange", contendo a "premaster secret" criptografada. - Após receber e processar a "premaster secret", o servidor envia uma mensagem "Finished" para indicar que o handshake está concluído do lado do cliente e do servidor.

Após o handshake, a comunicação segura é estabelecida entre o cliente e o servidor, e eles podem começar a trocar dados criptografados usando as chaves de sessão derivadas durante o processo de handshake. Este processo garante que a comunicação seja protegida contra interceptação e alteração por partes não autorizadas.

Esse handshake sempre ocorre apenas nas pontas da comunicação, ou seja, na origem e no destino do pacote. Ou seja, ao inves de termos um dado que antes passava por diversos roteadores em texto plano, apenas o cliente e o servidor conseguem ver os dados.