Qual é a diferença entre HTTP e HTTPS?

Qual é a diferença entre HTTP e HTTPS?
rafael-nercessian
rafael-nercessian

Compartilhe

Você já deve ter visto websites que possuem em sua URL o símbolo de um cadeado e o nome HTTPS logo ao lado.

Imagem de destaque #cover

Para entender essa diferença, vamos considerar a seguinte aplicação web na qual um usuário de uma empresa (vamos chamá-lo de João), está usando apenas o protocolo HTTP, ou seja, o modo “Não seguro”:

Observe que ele coloca seu e-mail e senha, e então, clica no botão “Logar”. Até o momento não vimos nenhum problema, certo?

Conhecendo o cenário problemático

Entretanto, esta aplicação se encontra dentro de um ambiente corporativo, portanto, existem vários funcionários e funcionárias. Então, um desses outros funcionários, que chamaremos de Pedro, decide fazer alguns testes na rede corporativa.

Nesses testes, o Pedro altera os protocolos de comunicação entre o João que está acessando a aplicação web e o roteador. O resultado disso, é que o Pedro acaba ficando no meio dessa comunicação entre o João e o roteador.

Em seguida, Pedro, por curiosidade, acaba instalando em sua máquina um programa capaz de analisar os protocolos que trafegam na comunicação entre o João e o roteador. Então, ele configura o programa para analisar toda comunicação via protocolo HTTP.

Nesse mesmo instante, quando o João tenta acessar novamente o sistema web, aparece o seguinte resultado para o Pedro:

Veja só o que Pedro obteve: ele conseguiu ver o usuário e a senha que foram digitados pelo João (usuário: [email protected] e senha: 123456). Mas como foi possível conseguir essas informações?

Banner da Escola de DevOps: Matricula-se na escola de DevOps. Junte-se a uma comunidade de mais de 500 mil estudantes. Na Alura você tem acesso a todos os cursos em uma única assinatura; tem novos lançamentos a cada semana; desafios práticos. Clique e saiba mais!

Entendendo o princípio do protocolo HTTP

As comunicações em uma rede são feitas por um conjunto de regras e procedimentos chamados de protocolo Link. O protocolo HTTP, Hypertext Transfer Protocol, foi inicialmente desenvolvido para permitir a comunicação com um servidor web, a princípio, o método existente era apenas o de “pegar” (GET) o conteúdo de um servidor.

Com o passar do tempo, surgiu a necessidade de não somente pedir informações do servidor, mas também de passar essas informações. Atualmente sabemos que na Web, não apenas pedimos como também mandamos informações, certo? Como é o caso de uma compra na internet. Mas o que acontece se esse for um dado sensível como os dados e senha do cartão de crédito?

Analisando o nome do protocolo HTTP, vemos que se trata de um protocolo para transferência de texto, dessa forma, os dados e senha do cartão de crédito são passados como um texto para o servidor também!

Isso significa que, caso alguém resolva analisar essas informações, será capaz de ver quais são os dados e senha do cartão de crédito. Portanto, quaisquer aplicações web que usam o protocolo HTTP e precisam passar dados sensíveis, possuem uma vulnerabilidade para o cliente final.

Tendo ciência de todo esse problema, todo o site que opera no protocolo HTTP, precisa, de alguma forma, encontrar algum meio de se proteger, certo? É nesse momento que o HTTPS entra como um grande aliado! Mas o que o protocolo HTTPS faz para resolver essa vulnerabilidade?

Leia também:

Conhecendo o protocolo HTTPS

Agora, ao invés de analisar um site “Não seguro”, isto é, com o protocolo HTTP, faremos a análise em um site “Seguro”, que trabalha com o HTTPS.

Nesse nosso exemplo, consideraremos a página de login da Alura usando os mesmos dados que usamos na aplicação que estava usando o HTTP. Vejamos o resultado:

Perceba que a informação não faz sentido algum. O que aconteceu dessa vez?

O HTTPS fez uma transformação nesses dados que foram enviados pelo cliente e, com isso, não foi possível descobrir os dados enviados pela vítima. Essa transformação de um dado que é incompreensível por nós humanos, pode ser caracterizado como um processo de criptografia.

Agora, como esse processo de criptografia do HTTPS é realizado?

Compreendendo o processo do HTTPS

Vamos analisar o seguinte caso: imagine que duas pessoas, Roberto e Luísa, queiram enviar uma carta. O Roberto inicia o processo de comunicação enviando essa carta para a Luísa, porém, essa carta é confidencial e não deve ser lida por outra pessoa que não seja a Luísa.

Processo de chaves simétricas

A fim de evitar que outra pessoa leia o conteúdo dessa carta, o Roberto decide colocá-la em uma caixa com um cadeado. Ele a tranca com uma chave e posteriormente, vai até o correio enviar a carta.

A Luísa recebe a caixa e utiliza uma cópia da chave idêntica a do Roberto para abrir a caixa e ler o conteúdo da carta. Para responder à mensagem recebida, a Luísa coloca de volta o cadeado e usa a mesma chave para trancar a caixa e enviá-la pelos correios.

Perceba que só temos uma chave nesse processo, a mesma que é usada para trancar (criptografar) e destrancar a caixa (descriptografar). Quando temos a mesma chave utilizada para criptografar e descriptografar um dado, chamamos esse processo de criptografia de chave simétrica. Confira a seguir, alguns exemplos de algoritmos que utilizam esse sistema de chave simétrica:

  • DES (Data Encryption Standard)
  • AES (Advanced Encryption Standard)

Uma vez que a mesma chave é usada para realizar a criptografia e a descriptografia, é necessário encontrar uma forma de enviá-la ao destinatário ou destinatária (caso ainda não tenha), para que possa, assim, destrancar a caixa e ler o conteúdo da carta (descriptografar).

Mas, veja só o que temos: se a mesma chave é usada para trancar (criptografar) e destrancar (descriptografar), o que aconteceria se alguém conseguisse interceptar essa chave? Essa pessoa conseguiria utilizá-la para poder ver as informações passadas e continuaríamos tendo o mesmo problema, não é mesmo? O que fazer a respeito, então?

Neste caso, somente a utilização desse processo de chaves simétricas durante as etapas de comunicação, pode não resolver completamente o problema e, por isso, uma nova forma de criptografia também foi desenvolvida para complementar a utilização das chaves simétricas. Vamos voltar ao exemplo anterior.

Processo de chaves assimétricas

Nós temos o Roberto e a Luísa: o Roberto deseja enviar uma carta com conteúdo confidencial para a Luísa. A ideia agora, é que o Roberto utilize um cadeado especial que terá 3 posições:

  1. Trancado;
  2. Destrancado;
  3. Trancado.

Além disso, o Roberto terá agora duas chaves: a primeira só poderá ser utilizada na ordem crescente (posição 1, 2 e 3) e a outra chave, só poderá ser usada na posição decrescente (posição 3, 2 e 1).

O Roberto decide trancar a caixa com a primeira chave, a que consegue operar o cadeado na ordem crescente. Dessa forma, para poder trancar a caixa, ela estará agora na posição 3. Essa chave, o Roberto não enviará para ninguém, pois é exclusiva dele. A chamaremos, então, de chave privada.

A segunda chave, que opera na ordem decrescente (posição 3, 2 e 1), será usada para enviar para a Luísa. Como estamos enviando essa segunda chave para outra pessoa, a chamaremos de chave pública.

Quando a caixa chegar até a Luísa, ela estará trancada na posição 3. Com a chave pública que ela recebeu, ela consegue operar na ordem decrescente, voltando o cadeado para a posição 2 (posição destrancada) e abrindo a caixa. Com isso, ela conseguirá ler o conteúdo da carta.

A Luísa, ao responder à mensagem, irá trancá-la com a chave pública. Lembre-se que a chave pública só funciona no sentido decrescente, dessa forma, como ela está na posição 2 (destrancada), ela só poderá ir para a posição 1 para trancá-la novamente. Uma vez que o Roberto receber a caixa, ele poderá usar sua chave privada (aquela que ele guardou para si e não distribuiu para ninguém, e só funciona na ordem crescente) para voltar o cadeado para a posição 2 (destrancada) e poder assim abrir o conteúdo da mensagem.

Perceba que agora temos duas chaves: uma chave privada e uma chave pública, sendo que quando uma chave é usada para trancar a caixa (criptografar), a outra chave é usada para destrancá-la (descriptografar). Quando temos duas chaves, chamamos esse processo de criptografia de chave assimétrica. Confira exemplos de alguns algoritmos que utilizam esse sistema de chave assimétrica:

  • RSA (sendo as iniciais dos sobrenomes de seus desenvolvedores: Ron Rivest, Adi Shamir, e Leonard Adleman);
  • DSA (Digital Signature Algorithm).

Implementação do protocolo de segurança do HTTPS

Os princípios de chaves simétricas e assimétricas serão usados pelo HTTPS durante o processo de comunicação. Dentro do HTTPS existe um protocolo responsável por inserir essa camada de criptografia, vamos conhecer algum deles:

SSL

O primeiro protocolo desenvolvido para esse fim foi de autoria da empresa Netscape e recebeu o nome de Secure Sockets Layer 1.0, ou mais popularmente conhecido como SSL v1.0. O protocolo SSL sofreu modificações e melhorias até chegar na sua última versão, a SSL v3.0.

Porém, ao longo dos anos foram descobertas algumas vulnerabilidades nesse protocolo. Uma dessas vulnerabilidades poderia expor informações criptografadas e acabou sendo chamada de Poodle (Padding Oracle on Downgraded Legacy Encryption) — para mais detalhes, segue o link do governo norte-americano alertando sobre o assunto vulnerabilidade descoberta no protocolo SSL.

TLS

Uma vez que o protocolo SSL v3.0 apresentou essas vulnerabilidades, foi necessário o desenvolvimento de um novo tipo de protocolo para atribuir essa camada de criptografia de uma maneira mais segura.

Esse novo protocolo recebeu o nome de Transport Layer Security, TLS 1.0 sofrendo adaptações e melhorias ao passar do tempo, chegando na versão mais atual até o momento de escrita desse post, a versão TLS 1.2

O princípio de utilização do TLS é unir as forças das chaves assimétricas e simétricas durante o processo de comunicação. Uma vez que as chaves assimétricas possuem um processo de criptografia envolvendo duas chaves distintas, consequentemente há um maior tempo de processamento. Por isso, o TLS utiliza esse processo na fase de autenticação entre o cliente e o servidor.

Em seguida, ele faz uso das chaves simétricas que possuem um processo de criptografia com apenas uma chave, logo, necessita de menos tempo para seu processamento.

Uma vez que podemos ter uma grande quantidade de dados sendo transmitidos, as chaves simétricas serão mais rápidas para processar toda essa informação e será utilizado na fase de transporte dos dados, também conhecido como bulk.

Caso tenha mais interesse nesse mundo de protocolos e segurança, não deixe de ver nossos cursos sobre:

Veja outros artigos sobre DevOps