Segurança: Entenda como funciona o Protocolo HTTPS

Segurança

Protocolo HTTPS, certamente você já aplicou em um website ou sistema web. Sabe que é um protocolo de segurança utilizado para assegurar a autenticidade e integridade dos dados dos usuários que navegam em seu site. Mas você sabe como esse protocolo funciona?

Sabemos que navegar com segurança na internet é um desafio que sempre teremos, pois sempre haverão tentativas maliciosas  de conseguir arquivos, dados pessoais, números de cartões de crédito e etc, pelos meios digitais.

Nesse post vamos ver como o protocolo HTTPS trabalha para garantir a segurança na transferência de dados entre usuários e aplicações web. Vem comigo que eu te mostro.

O que é HTTPS?

HTTPS é a sigla do termo em inglês Hyper Text Transfer Protocol Secure, que traduzido em portugês significa Protocolo de Transferência de Hipertexto Seguro. É a versão segura do protoccolo HTTP Hyper Text Transfer Protocol.

Difícil de entender? Então vou tentar explicar de forma mais simples, HTTPS é um protocolo que visa conceder uma conexão segura entre o seu navegador e algum serviço disponível na internet, como sites de bancos, ecomerces, emails, e por ai vai.

Por que devo usar HTTPS?

O principal motivo para aplicar o HTTPS em seu site é a segurança dos dados trafegados entre ele e o seu cliente. Além da segurança você deve aplicá-lo em seu site para aparecer melhor nos resultados de buscas do Google, pois o HTTPS é um dos fatores de ranqueamento que o Google leva em consideração na hora de exibir seus resultados.

Como funciona o protocolo HTTPS

Imagine que Priscila se conecta a um servidor, “Pedro” através da internet, essa conexão é denominada indireta, ou seja, Priscila envia uma mensagem para Pedro, mas antes de chegar a ele essa mensagem é enviada para Flávio, que manda pra Jonas, que manda pra Pedro. Então Pedro responde pra Jonas, que repassa pra Flávio que por fim manda pra Priscila.

Isso significa que nem sempre se sabe qual o caminho exato que os pacotes de uma conexão vão percorrer até chegar ao destino final, nem se pode garantir com certeza que todos os nós (Flávio e Jonas) são honestos.

Mas então como garantir que a comunicação entre Priscila e Pedro seja íntegra, onde ninguém no meio a altere, confidencial, ninguém no meio a veja e autêntica, na outra ponta da comunicação tem de estar Pedro, e não alguém se passando por ele? A resposta é: Criptografia!

Criptografia

Com origem no meio militar, e somente popularizada no meio civil após o surgimento da internet, a acriptografia busca resolver o problema mencionado anteriormente: mandar mensagens seguras por um canal de comunicação inseguro.

Tipos de criptografia

Assim como a internet e toda a tecnologia a criptografia também evoluiu, sendo aplicada a diversas situações, se adaptando e tomando vertentes variadas. Atualmente a criptografia possui dois tipos, a simétrica e a assimétrica.

Criptografia simétrica onde os dois comunicadores, Priscila e Pedro compartilham um segredo e criptografia assimétrica, onde apenas um dos comunicadores possui um segredo que o outro não possui. O SSL/TLS utiliza ambos: assimétrica para assegurar a autenticidade, e simétrica para a confidencialidade e integridade.

Criptografia cliente servidor

Vimos que o servidor (Pedro) envia ao cliente sua chave pública. Então, ele assina um dos pacotes com sua chave privada, provando ao cliente que ele é mesmo o detentor da chave pública.

Até então tudo bem, mas como Priscila pode ter certeza que a chave que ela recebeu  dizendo vir de Pedro veio mesmo de dele?

Se Priscila já conhece a chave pública de Pedro, ou seja, tem salva em seu computador a chave associada à sua identidade, o domínio que pertence a Pedro, então é fácil validar. Mas caso Priscila não a tenha, ela precisará que alguém de confiança faça intermédio nessa comunicação.

Como o navegador valida um certificado

Como verificar a assinatura de Pedro se Priscila não tem nada pra comparar com ela? Isso é feito através de um certificado, que nada mais é do que uma chave pública associada a uma identidade (um nome) e o par assinado por alguém de confiança CA.

Há mais de uma maneira de se fazer essa validação. Seja por uma Autoridade Certificadora (CA), por Redes de Confiança (Web of Trust) entre outros. Sendo que o mais comum é o uso de Autoridades Certificadoras. Elas são, grosso modo, um conjunto de empresas cuja chave pública já vem embutida no navegador que você usa.

Você já deve ter reparado que quando entra em uma página web do governo brasileiro, um alerta de certificado inválido é exibido em seu navegador. Isso acontece porque a ICP-Brasil não está na lista de certificados reconhecidos contidos nos atuais browsers.

Tipos de certificados

Existem vários CAs espalhados pelo mundo praticando diversos preços dependendo de sua reputação e tempo de validade do certificado.

Se você tem por exemplo um website, e quer que os dados entre ele e o usuário  de forma segura para o público em geral, não há muito o que fazer a não ser pagar para uma dessas empresas para verificar sua identidade e assinar seu certificado (criar o certificado é o de menos, qualquer um pode fazer).

Let’s Encrypt

Let’s Encrypt é uma autoridade de certificação gratuita, automatizada e aberta, trazida pelo Internet Security Research Group (ISRG). O objetivo do Let’s Encrypt  é possibilitar a configuração de um servidor HTTPS e tê-lo automaticamente obtenha um certificado confiável no navegador, sem qualquer intervenção humana.

AutoSSL

O AutoSSL foi desenvolvido em uma parceria da CPanel com a Comodo, com o intuito de tornar a internet mais  segura disponibilizando certificados gratuitos reconhecidos pelos navegadores mais atuais e modernos.  O AutoSSL é um plugin disponível apenas para o CPanel, isso facilita e muito a instalação e renovação desse certificado.

Certificado Autoassinado

Levando em consideração que nem todo SO ou browser reconhece toda CA. Mas se tudo o que você quer é distribuir uma aplicação para um público restrito (digamos, algo que só será acessível aos funcionários da sua empresa) você também pode criar um Certificado Raiz – usado para assinar outros certificados – e instalá-lo manualmente no browser dos usuários. Evitando assim ter que pagar por esse serviço.”

Requisição a um site com HTTPS

Agora que já sabemos do que é composto o protocolo HTTPS, vamos ver quais são os passos executados em uma conexão com SSL.

  • Hello Request
  • Client Hello
  • Server Hello
  • Certificate (quando presente)
  • Server Key Exchange
  • Certificate Request
  • Server Hello Done
  • Certificate Verify
  • Client Key Exchange
  • Finished

Hello Request

O Hello Request acontece quando uma conexão é estabelecida pelo cliente (no nosso caso o browser) com o servidor.

Client Hello

Nesse passo o cliente se identifica e informa suas características, como versões de SSL aceitas, protocolos e cifras suportadas e o ID de sessão que gostaria de usar entre ele e o servidor.

Server Hello

O servidor tenha compatibilidade com os requisitos solicitados pelo cliente, ele então responde com a versão de SSL a ser utilizada na sessão, o ID de sessão (vazio caso o servidor escolha não suportar sessões), cifras suportadas, método de compressão a ser utilizado e a lista de certificados aceitos por ele.

Certificate

Em boa parte dos casos a conexão SSL irá utilizar um certificado digital para autenticar a conexão. Neste momento o servidor envia o seu certificado.

Server Key Exchange

Opcional, caso o servidor esteja operando sem certificado.

Certificate Request

Passo opcional, só acontece quando o cliente precisar se autenticar utilizando um certificado digital.

Server Hello Done

Nesse passo o servidor envia um pacote para indicar que a negociação de recursos (certificados, chaves, protocolos) está finalizada.

Certificate Verify

Caso o cliente tenha enviado um certificado para se autenticar, o servidor responderá se aceitou ou não o certificado.

Client Key Exchange

O conteúdo desta pacote depende da escolha de algoritmo de chave pública estabelecido entre as duas partes. O payload pode ser uma pré-chave mestra (RSA ou DH). Se RSA, o cliente irá gerar uma chave encriptada usando a chave pública do servidor, e a enviará de volta. Essa chave encriptada é usada para desencriptar a pré-chave mestra previamente enviada. Neste momento, a conexão SSL é decladada aberta.

Finished

O primeiro conteúdo realmente encriptado enviado, o pacote Finished marca o momento onde dados podem ser encriptados e enviados entre cliente e servidor.

Após o último passo, todo o tráfego de dados entre o cliente e o servidor é encriptado utilizando as chaves negociadas entre as duas partes. Os passos podem ser visualizados na imagem abaixo:

Funcionamento de uma conexão segura com Protocolo HTTPS

Funcionamento de uma conexão segura com protocolo Https. Fonte: CISCO

Concluindo

HTTPS é um importante item para a segurança na internet, afinal ninguém quer ter seus dados pessoais interceptados e utilizados por ninguém, não é mesmo? Mas além de ter a segurança em suas transações, o seu ambiente web também deve estar seguro, ou de nada adiantará o HTTPS.

O protocolo HTTPS também é um fator importante de ranqueamento, por motivos que nem precisam ser novamente citados aqui. Bom, agora que você sabe como o HTTPS funciona espero que dê a devida importância a ele, pois assim você contribuirá para uma web mais segura.

Algumas referências que utilizei:

Description of the Secure Sockets Layer (SSL) Handshake
SSL Introduction with Sample Transaction and Packet Exchange – Cisco