Certificados e OpenSSL - A Sopa de Letras

A sopa de letras: HTTPS, TLS, SSL, HSTS, CA, PGP, GPG e OpenPGP. Uma breve explicação sobre cada um deles e como se usa.

[ Hits: 12.681 ]

Por: Esli Silva em 30/01/2020 | Blog: https://esli.blog.br


Introdução



Atualmente, o Google e seu mecanismo de busca, estão punindo quem não utiliza protocolos de segurança, antes marcando os sites seguros, hoje marcando sites como inseguros e rebaixando-os dos resultados quando um usuário realiza alguma pesquisa. Em futuro breve, os navegadores irão exibir uma página de alerta ao usuário, o que certamente causará o abandono do site pelo usuário leigo.

Toda vez que você entra em um site e realiza algum tipo de login, está dizendo: "sim, eu confio neste site, por isso estou disposto a compartilhar minhas informações pessoais com ele". Esses dados podem incluir seu nome, sexo, endereço físico, endereço de e-mail, geolocalização, dados e atividades feitas nas redes sociais, cartão de crédito, carteiras digitais, dentre outras.

Mas como você sabe que pode confiar em um site específico? Em outras palavras, o que o site está fazendo para proteger sua transação, para que você possa confiar nela?

HTTPS

Por padrão, um site não é seguro se ele usa o protocolo HTTP. Adicionar um certificado configurado através do host do site à rota, pode transformar o site de um site HTTP não seguro em um site HTTPS seguro. O ícone de cadeado geralmente indica que o site está protegido por HTTPS.

HTTP é uma sigla em inglês para Hypertext Transfer Protocol ou "Protocolo de Transferência de Hipertexto". Trata-se, portanto, de um código responsável por fazer a comunicação entre os dados de uma página na internet e quem está fazendo o acesso, geralmente, pela porta 80. Ou seja, é por causa dele que você está lendo este artigo.

O HTTP Over SSL, ou HTTPS, é uma implementação idêntica do HTTP, mas com uma camada adicional, o TLS.

Já vi artigos afirmarem que HTTPS, o S é de Secure (Seguro), mas isto induz ao erro, pois existe o SHTTP que é descrito na RFC, este sim é o "Secure Hypertext Transfer Protocol".

O HTTP Over SSL (HTTPS) é descrito na RFC 2818. Na documentação desta RFC, há uma descrição excelente: "Conceitualmente, HTTP/TLS é muito simples. Basta usar HTTP sobre TLS exatamente como você usaria HTTP sobre TCP"

SSL e TLS

TLS é a geração atual do antigo protocolo SSL (Secure Socket Layer).

O TLS atualmente na versão 1.2 (a mais adotada) está descrito na RFC. Há também o TSL 1.3.

A função do HTTPS é exatamente a mesma do HTTP, porém, o protocolo apresenta uma camada que criptografa os dados e a comunicação entre o servidor e quem está acessando, o SSL geralmente é realizada na porta 443. Desse modo, o servidor que é acessado para repassar os dados das páginas para o seu computador precisa ser autenticado por meio de chaves e certificados digitais para que seja garantida a segurança na conexão à página.

O agente que atua como cliente HTTP, também atua como cliente TLS. Ele deve iniciar uma conexão com o servidor na porta apropriada e, em seguida, envia um "Olá" (é o TLS ClientHello) para iniciar o "aperto de mão" (é o TLS handshake) - (assim ambos se conhecem e se comunicam ba-du-tsss rsrsss). Quando o handshake termina, o cliente inicia a primeira solicitação HTTP. Todos os dados HTTP seguintes SERÃO enviados com o tipo TLS "dados de aplicação", daí o HTTP sobre TLS.

CA

Você que está lendo este artigo confia no certificado que está neste site. O seu Sistema Operacional e/ou seu navegador possui instalado a CA (Autoridade de Certificação) e seu navegador confia nos certificados emitidos por ela. E, através de algumas validações, meu site possui um certificado válido emitido pela CA que seu computador confia.

Uma destas validações é o OCSP (Protocolo de Certificação Online de Estado) descrito na RFC 6960. Outras validações, como invalidação de certificados e autoridades são enviadas ao cliente no formato de atualização (este é um dos motivos da Microsoft ainda enviar atualizações ao Windows Vista e 7 e há bem pouco tempo atrás ao Windows XP).

No Linux, a lista de CA raiz estão em:
  • /usr/share/ca-certificates/
  • /usr/local/share/ca-certificates/
  • /etc/ssl/certs/

Já acessou algum site do Governo Brasileiro e teve erro de TLS/SSL? Pois então, os certificados são gerados pelo órgão criado em 2001, voltado para Infraestrutura de Chaves Públicas Brasileira - ICP-Brasil, porém, a CA raiz desta 'autoridade' não está nos sistemas ou navegadores, ou seja, o cliente não confia! O usuário deve baixar a CA raiz e instalar ele próprio em seu S.O. e/ou navegador para acessar sem erros.

Desde 2008, o ITI (Instituto Nacional de Tecnologia da Informação Brasileiro) tenta incluir a AC raiz brasileira na lista de certificados confiáveis do Firefox, a entidade brasileira ainda carece de uma auditoria exigida pela Mozilla, o que justifica a não inclusão do certificado no navegador. Não consegui dados sobre se existe um processo para inseri-los no Google Chrome.

HSTS

Diversos sites para implementar o HTTPS acabam utilizando o redirect nos servidores, isto era correto até 2012, de lá para cá existe o protocolo HSTS, descrito na RFC 6797. Este protocolo facilmente implementado com 1 linha apenas no Apache, Caddy e Nginx

O HTTP Strict Transport Security (HSTS) é um mecanismo de política de segurança que ajuda a proteger sites contra ataques de downgrade de protocolo e sequestro de cookies. A ativação do HSTS declara que os navegadores da WEB devem interagir apenas com o servidor usando uma conexão HTTPS segura e nunca por meio de uma conexão HTTP insegura. A política especifica um período de tempo durante o qual o servidor deve ser acessado de forma segura.

Ao usar o HSTS, o cliente entende que 100% da comunicação com aquele domínio DEVE ser via HTTPS, e o cache no header informa quando ele deve verificar novamente (ou seja, mesmo desativando o HSTS, o cliente continuará a forçar e usar o HTTPS por 1 ano - tempo médio usado na configuração do cache). Ou seja, com o HSTS, para alguém conseguir algum ataque como envenenar cookies, ou outro tipo de man-in-the-middle, precisaria não somente atacar o servidor do site original e desabilita-lo, mas também esperar 1 ano para poder enviar um http para o cliente alvo.

Para validar o HSTS em um site, basta executar o seguinte comando no terminal:

curl -s -D- https://esli-nux.com/ | grep -i Strict
strict-transport-security: max-age=31536000; includeSubDomains; preload

Para habilitar o HSTS no Apache, Nginx e Caddy:

No Apache:

# this domain should only be contacted in HTTPS for the next 6 months
Header add Strict-Transport-Security "max-age=15768000"

Para Nginx, adicione o seguinte parâmetro em seu arquivo de configuração:

add_header Strict-Transport-Security max-age=15768000;

No Caddy, adicione no Caddyfile:

header / Strict-Transport-Security "max-age=31536000;"

Para verificar toda a comunicação, pode-se executar no terminal:

openssl s_client -showcerts -connect esli-nux.com:443

Será obtido a lista de certificados, o detalhamento do handshake (cifra, protocolo, sessão...).

    Próxima página

Páginas do artigo
   1. Introdução
   2. Certificados Auto Assinados
Outros artigos deste autor

Rootsh - Auditando/monitorando o root e demais usuários do GNU/Linux

Guia SSD no Linux: tudo que você precisa saber e o que precisa esquecer!

DHCP no GNU/Linux - Guia para ISC-DHCP Server

Leitura recomendada

Monitorando máquinas Windows com o Nagios

Desenvolvimento Web - Simples dicas de segurança

Fundamentos da criptografia assimétrica

PHPIDS - PHP Intrusion Detection System, deixe seu site livre de intrusos!

Servidor de logs em Debian Linux

  
Comentários
[1] Comentário enviado por Raz em 07/02/2020 - 13:59h

Muito bom amigo, obrigado..

"A caixa dizia: Requer MS Windows ou superior. Então instalei Linux."

[2] Comentário enviado por vitorhugonalves em 17/02/2020 - 16:00h

Boa tarde,
No dia 06 de fevereiro saiu a notícia sobre a CA do ITI estar disponível nos principais navegadores e SOs.

https://www.iti.gov.br/component/content/article?id=4094

[3] Comentário enviado por Eslih em 17/02/2020 - 19:46h


[2] Comentário enviado por vitorhugonalves em 17/02/2020 - 16:00h

Boa tarde,
No dia 06 de fevereiro saiu a notícia sobre a CA do ITI estar disponível nos principais navegadores e SOs.

https://www.iti.gov.br/component/content/article?id=4094


Show!!!!
Vamos aguardar as atualizações :-)

O legal que o texto inicia com eles assumindo o problemão que levou 18 anos para ser resolvido:
"Será um grande marco para o Brasil e para o ITI. Resolveremos, de uma vez por todas, esse grande problema que tanto atrapalha o acesso dos cidadãos às aplicações online(...)"

Obrigado por compartilhar @vitorhugonalves


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts