O que é HSTS e como você o configura?

Shutterstock / Pavel Ignatov
HTTPS é muito seguro, mas tem uma falha: ele não está ativado por padrão. Um invasor no meio pode sequestrar a conexão de um usuário antes que você diga a ele para usar HTTPS. O HSTS resolve esse problema e ativa o HTTPS em todo o site.
Ter a criptografia SSL em primeiro lugar é um pré-requisito para o HSTS, porque, caso contrário, ativar o HSTS apenas tornará seu site inacessível. Você pode ler nosso guia sobre como configurar certificados SSL gratuitos com LetsEncrypt para habilitar HTTPS em seu site.
Como funciona o HSTS?
HSTS significa HTTP Strict Transport Security e governa como o navegador do usuário deve se conectar ao seu site.
Veja como normalmente funciona a conexão com o seu site. Um usuário deseja se conectar ao seu site e cutuca o seu servidor com uma solicitação de conexão. Seu servidor faz a coisa responsável e envia uma resposta 301 Moved Permanently ao navegador, informando que o endereço HTTP solicitado precisa ser redirecionado para HTTPS. O usuário continua normalmente, navegando com segurança.
No entanto, um invasor com controle sobre a conexão (como é o caso dos ataques man-in-the-middle) pode facilmente bloquear a resposta 301 e assumir o controle da sessão de navegação do usuário. Esse é um problema importante, pois anula o objetivo de criptografar o site em primeiro lugar.
Com o HSTS ativado, o servidor envia a mesma resposta 301 Moved Permanently, mas também envia um cabeçalho dizendo, “ Ei, eu não sou compatível com HTTP. Nem tente fazer mais solicitações HTTP, porque vou redirecionar todas elas. ” O navegador recebe a mensagem e se redireciona para HTTPS antes de enviar qualquer coisa. Isso garante que seu site seja totalmente HTTPS, por padrão, o tempo todo.
Pré-carregamento de HSTS
No entanto, o HSTS padrão tem uma grande falha: a primeira conexão que um usuário faz ainda é insegura. Se um usuário já tiver usado seu site antes, o navegador respeitará a solicitação HSTS no futuro. Mas a resposta inicial do HSTS é insegura, então, se um usuário estiver navegando em uma cafeteria e abrir seu site pela primeira vez (ou, pela primeira vez em um dispositivo móvel), a conexão dele ainda poderá ser invadida.
O pré-carregamento de HSTS é uma iniciativa do projeto Chromium para resolver esse problema. O Projeto Chromium mantém uma lista de sites que são habilitados para HSTS o tempo todo. Essa lista é incorporada à maioria dos navegadores principais, e o navegador a verifica antes de fazer solicitações a novos sites.
Se você estiver na lista, mesmo que um usuário nunca tenha interagido com o seu site antes, o usuário agirá como se já tivesse visto o cabeçalho HSTS e nunca se comunicará com HTTP. Isso torna a conexão totalmente segura desde o início.
Ativando HSTS e ingressando na lista de pré-carregamento
O HSTS pode ser ativado com um cabeçalho simples, que é adicionado a todas as respostas que seu servidor envia:
Strict-Transport-Security: max-age = 300; includeSubDomains; pré-carga
Você pode incluir isso no arquivo de configuração do seu servidor da web. Por exemplo, no Nginx, você pode definir o cabeçalho incluindo uma linha add_header em seu bloco de servidor:
add_header Strict-Transport-Security 'max-age = 300; includeSubDomains; preload; sempre; '
E para o Apache, o comando é semelhante, usando a linha Header always set:
O cabeçalho sempre define Strict-Transport-Security "max-age = 300; includeSubDomains; preload"
No entanto, existem mais algumas etapas para garantir que tudo funcione corretamente e para ser elegível para pré-carregamento.
Primeiro, certifique-se de redirecionar todas as solicitações HTTP para HTTPS. No Nginx, você pode fazer isso ouvindo todas as solicitações da porta 80 (HTTP) e enviando uma solicitação 301 com o URL alterado para o equivalente HTTPS:
servidor {ouvir 80; return 301 https: // $ host $ request_uri; }
Para se qualificar para o pré-carregamento, você também deve se certificar de que todos os seus subdomínios sejam cobertos pelo seu certificado SSL e que você os represente por HTTPS. Você pode fazer isso com um certificado curinga, que pode ser obtido gratuitamente no LetsEncrypt. Se você não estiver pré-carregando, isso não é necessário, mas ainda é aconselhável.
Você pode verificar se o HSTS está funcionando corretamente carregando seu site com o cabeçalho ativado, acessando chrome: // net-internals / # hsts e inserindo o nome do seu site em “ Query HSTS / PKP domain ” ferramenta de pesquisa. Se o seu site exibe uma saída como esta, o HSTS está ativado.

Além disso, você deve verificar se o cabeçalho strict-transport-security está incluído nos cabeçalhos de resposta do seu site, o que pode ser feito na guia Rede no console de desenvolvimento do Chrome:

Depois de fazer tudo isso, você deve testar se tudo funciona e se nada quebrou quando você ligou o HSTS. Se não houver problemas, você pode acessar a página de envio de pré-carregamento, inserir seu nome de domínio e enviar seu site.
Problemas com HSTS e pré-carregamento de HSTS
Com o HSTS, seu site agora é forçado a usar HTTPS para tudo. Isso inclui todos os subdomínios, até mesmo ferramentas internas. Cada subdomínio que você possui deve ter um certificado SSL válido e ser protegido com HTTPS, ou ficará inacessível durante o cabeçalho HSTS (que pode ser de até dois anos). Se você tiver um certificado curinga, poderá resolver alguns desses problemas, mas precisa fazer testes antes de habilitá-lo por um longo período.
O principal problema com o pré-carregamento do HSTS é que ele é muito permanente. A idade máxima mínima é de um ano e, uma vez que seu site seja colocado na lista, você não pode sair da lista sem passar por um longo processo de remoção que exige que cada usuário atualize o navegador para aplicar as alterações.
Você pode consultar esta lista de meta-bugs de solicitações de remoção para ver quais são os principais problemas na prática. O Uber teve problemas com subdomínios. Subdomínios de terceiro e nível superior podem não ser suportados em certificações normais de curinga. Um site da Suécia ainda relata uma receita de publicidade significativamente menor, pois os anunciantes locais não carregam seus recursos por HTTPS e o HSTS bloqueia todas as solicitações HTTP não seguras feitas enquanto o usuário está conectado ao seu site.
A melhor maneira de evitar esses problemas é implementar o HSTS em estágios antes de fazer a troca permanente para o pré-carregamento. O Projeto Chromium recomenda testes em intervalos, definindo o valor de idade máxima em cinco minutos para testar se funciona:
idade máxima = 300; includeSubDomains
Depois, uma semana para um teste mais longo:
idade máxima = 604800; includeSubDomains
Depois, por um mês, até que você tenha certeza de que não há problemas .:
idade máxima = 2592000; includeSubDomains
Se algo der errado e você definir uma propriedade max-age realmente longa, poderá limpar o sinalizador local na página interna da rede do Chrome.
Depois de ter certeza de que nada dará errado em ter apenas HTTPS ativado o tempo todo, você pode definir sua idade máxima para dois anos, adicionar a diretiva de pré-carregamento e enviar seu site para pré-carregamento.
Nenhum comentário