HSTS (HTTP Strict Transport Security, ou Segurança Restrita de Transporte) é um cabeçalho que o site envia para dizer ao navegador: “durante este período, acesse meu domínio só por HTTPS”. A partir daí, o navegador troca sozinho http:// por https:// e não deixa o visitante ignorar erros de certificado.
O HSTS fecha uma brecha que o certificado SSL sozinho não fecha: o primeiro pedido em HTTP, antes do redirecionamento. Abaixo você vê como ele funciona, como ativar no Apache, NGINX, cPanel e Cloudflare, os riscos da lista de pré-carregamento e como limpar o HSTS no Chrome.
- O que é HSTS e como funciona
- Por que o HTTPS sozinho não basta
- As diretivas: max-age, includeSubDomains e preload
- Como ativar o HSTS no seu site
- Lista de pré-carregamento (HSTS preload)
- Riscos e cuidados antes de ativar
- Como testar se o HSTS está ativo
- HSTS no Chrome: erro “o site usa HSTS” e como limpar
- Perguntas frequentes
O que é HSTS e como funciona
O HSTS é um padrão aberto da internet, suportado por todos os navegadores atuais. Na prática, é uma linha a mais nas respostas HTTPS do servidor:
Strict-Transport-Security: max-age=31536000; includeSubDomains
Quando o navegador recebe esse cabeçalho por uma conexão HTTPS válida, ele grava o domínio numa lista interna e passa a seguir três regras até o prazo acabar:
- Troca HTTP por HTTPS antes de sair do computador. Se alguém digitar o endereço sem https ou clicar num link antigo, o pedido inseguro nem chega à rede.
- Bloqueia o “continuar mesmo assim”. Com certificado vencido, inválido ou de outro domínio, o navegador não oferece a opção de prosseguir.
- Renova o prazo a cada visita. Cada resposta com o cabeçalho reinicia a contagem do
max-age.
Importante: segundo a documentação do MDN, os navegadores ignoram o cabeçalho quando ele chega por HTTP comum. Ele só vale se vier numa resposta HTTPS, para que um atacante não consiga inventar ou apagar a política no meio do caminho.
Por que o HTTPS sozinho não basta
Um site com certificado SSL/TLS e redirecionamento 301 parece protegido. O problema está no primeiro passo: quando alguém digita exemplo.com.br, o navegador costuma tentar HTTP antes de receber o redirecionamento. Numa rede Wi-Fi pública, esse pedido inseguro pode ser interceptado.
É o chamado SSL stripping (ou ataque de downgrade), um tipo de ataque man-in-the-middle:
| Etapa | Sem HSTS | Com HSTS |
|---|---|---|
| Usuário digita o endereço sem https | Navegador envia pedido em HTTP pela rede | Navegador converte para HTTPS antes de enviar |
| Atacante na mesma rede | Intercepta o pedido e responde em HTTP, conversando com o site real em HTTPS | Não vê pedido em HTTP para interceptar |
| Login e cookies de sessão | Trafegam sem criptografia e podem ser roubados | Seguem cifrados |
| Certificado falso apresentado | Usuário pode clicar em “continuar” | Navegador bloqueia sem opção de prosseguir |
Ainda sobra uma brecha: a primeiríssima visita, antes de o navegador conhecer a política. É ela que a lista de pré-carregamento resolve, como você verá mais abaixo.
As diretivas: max-age, includeSubDomains e preload
O cabeçalho tem uma diretiva obrigatória e duas opcionais:
max-age(obrigatória): tempo, em segundos, que o navegador deve lembrar a regra.31536000equivale a um ano.max-age=0desativa a política (mas só depois que o navegador receber esse valor por HTTPS).includeSubDomains: estende a regra a todos os subdomínios, comowww,loja,webmailouintranet. Só use se todos tiverem HTTPS funcionando.preload: sinaliza que o domínio quer entrar na lista de pré-carregamento dos navegadores. Sozinha, não faz nada; o domínio precisa ser enviado em hstspreload.org.
Valores de referência, do teste à política completa:
# Teste (5 minutos)
Strict-Transport-Security: max-age=300
# Produção (1 ano, com subdomínios)
Strict-Transport-Security: max-age=31536000; includeSubDomains
# Pronto para a lista de preload (2 anos)
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
Como ativar o HSTS no seu site
Antes de tudo, o site precisa ter certificado válido em todos os endereços e redirecionar HTTP para HTTPS. Depois, adicione o cabeçalho no servidor ou na CDN, nunca nos dois ao mesmo tempo com valores diferentes.
Comece pequeno: use max-age=300 (5 minutos) nos primeiros testes. Se algo quebrar, a política expira logo. O site hstspreload.org recomenda subir em etapas (5 minutos, 1 semana, 1 mês) e esperar o prazo inteiro de cada etapa antes de avançar.
Apache (arquivo .htaccess)
Na hospedagem com cPanel, edite o arquivo .htaccess da pasta do site (normalmente public_html) e inclua no topo:
# Redireciona HTTP para HTTPS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# HSTS (requer mod_headers)
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</IfModule>
O cabeçalho também sai na resposta HTTP do redirecionamento, mas os navegadores o ignoram ali, então não há problema. Se o servidor for seu (VPS ou dedicado), o lugar mais limpo é o bloco <VirtualHost *:443> da configuração do Apache, com a mesma linha Header always set.
NGINX
No NGINX, o cabeçalho vai no bloco server que escuta na porta 443. O parâmetro always faz o cabeçalho sair também em respostas de erro:
server {
listen 80;
server_name exemplo.com.br www.exemplo.com.br;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name exemplo.com.br www.exemplo.com.br;
# ssl_certificate e ssl_certificate_key aqui
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
}
Atenção a um detalhe do NGINX: se um bloco location tiver o próprio add_header, ele deixa de herdar os cabeçalhos do server (está na documentação do módulo). Nesse caso, repita a linha do HSTS dentro do location. Depois, rode nginx -t e recarregue o serviço.
cPanel
O cPanel não tem um botão de HSTS para o usuário da hospedagem. O caminho é este:
- Em Domínios, ligue Force HTTPS Redirect (Forçar redirecionamento HTTPS) no domínio. A documentação do cPanel explica que a opção só aparece para domínios com certificado válido.
- Abra o Gerenciador de Arquivos, ative “mostrar arquivos ocultos” e edite o
.htaccessdo site. - Cole o bloco
<IfModule mod_headers.c>do exemplo do Apache e salve.
Quem administra o servidor pelo WHM pode aplicar o cabeçalho para todas as contas pelo Include Editor da configuração do Apache, mas isso vale para todos os sites do servidor: avalie com cuidado.
Cloudflare
Se o domínio passa pela Cloudflare com o proxy ligado, ative por lá (documentação oficial):
- No painel, vá em SSL/TLS > Edge Certificates.
- Em HTTP Strict Transport Security (HSTS), clique em Enable HSTS, leia o aviso e confirme.
- Escolha o Max Age (de 1 a 12 meses), decida sobre includeSubDomains e Preload e salve.
Com HSTS ativo na Cloudflare, evite pausar o serviço, tirar o proxy (nuvem laranja) dos registros ou mudar os nameservers sem antes zerar o Max Age: o site pode ficar inacessível para quem já recebeu a política.
Lista de pré-carregamento (HSTS preload)
A lista de preload é mantida pelo projeto Chromium em hstspreload.org e vem embutida nos navegadores. Os domínios dela são tratados como HSTS desde a primeira visita, sem depender de ter recebido o cabeçalho antes. O MDN observa que, apesar de ser hospedada pelo Google, a lista é usada pelos principais navegadores.
Requisitos atuais para enviar um domínio pelo formulário:
- Certificado válido.
- Redirecionar HTTP para HTTPS no mesmo host, se o servidor escuta na porta 80.
- Todos os subdomínios servidos em HTTPS, incluindo o
www(se existir no DNS) e subdomínios internos. - Cabeçalho HSTS no domínio principal, nas respostas HTTPS, com
max-agede pelo menos 31536000 (1 ano),includeSubDomainsepreload. - Se o site em HTTPS fizer redirecionamento, a resposta do redirecionamento também precisa levar o cabeçalho.
Difícil de desfazer: o próprio hstspreload.org avisa que a inclusão não é fácil de reverter. A remoção é possível, mas leva meses para chegar aos usuários via atualização do Chrome, e não há garantia de prazo nos outros navegadores. Se um dia algum subdomínio precisar funcionar só em HTTP, ele ficará inacessível nesse período.
Riscos e cuidados antes de ativar
O HSTS faz exatamente o que promete, inclusive quando algo dá errado do seu lado. Situações que viram site fora do ar:
| Situação | O que acontece com HSTS ativo | Como evitar |
|---|---|---|
| Certificado vence ou é instalado errado | Visitante não consegue ignorar o erro e entrar | Renovação automática e monitoramento da validade |
Subdomínio sem HTTPS com includeSubDomains | Subdomínio para de abrir (painel antigo, sistema interno, câmera, impressora) | Mapear todos os subdomínios do DNS antes |
| Voltar o site para HTTP | Quem já visitou não consegue acessar até o max-age acabar | Publicar max-age=0 em HTTPS antes da mudança |
| Domínio na lista de preload | Regra vale para todos os visitantes, mesmo os novos | Só enviar depois de meses estável em produção |
O primeiro risco ficou mais relevante em 2026: o CA/Browser Forum reduziu a validade máxima dos certificados públicos para 200 dias a partir de 15 de março de 2026, então as renovações ficaram mais frequentes. Veja os detalhes em validade do SSL muda em 2026.
Na SAN: HSTS só funciona sobre um certificado válido em todos os endereços. A SAN oferece certificados SSL DV, OV, EV, Wildcard (para cobrir subdomínios) e multidomínio, de várias certificadoras.
Como testar se o HSTS está ativo
O jeito mais rápido é pedir só os cabeçalhos da página pelo terminal (funciona no Linux, macOS e no Windows 10/11, que já trazem o curl):
curl -sI https://exemplo.com.br | grep -i strict-transport-security
# Resposta esperada:
strict-transport-security: max-age=31536000; includeSubDomains
No PowerShell do Windows, troque o grep -i por findstr /i. Outras formas de conferir:
- DevTools do Chrome: F12 > aba Rede (Network), recarregue a página e veja os cabeçalhos de resposta do documento. Depois, digite o endereço com
http://: com HSTS ativo, aparece um “307 Internal Redirect” gerado pelo próprio navegador. - chrome://net-internals/#hsts: em “Query HSTS/PKP domain”, digite o domínio e veja se o Chrome guardou a política.
- hstspreload.org: informe o domínio para ver se ele atende aos requisitos ou se já está na lista.
- Certificado: confira validade, cadeia e autoridade certificadora no verificador de SSL gratuito da SAN, em cada domínio e subdomínio coberto.
HSTS no Chrome: erro “o site usa HSTS” e como limpar
Quando um domínio com HSTS apresenta problema de certificado, o Chrome mostra a tela de “Sua conexão não é particular” com um aviso de que você não pode visitar o site agora porque ele usa HSTS. Não há botão “Avançado > continuar”: é o HSTS funcionando.
Se você é o dono do site e precisa apagar a política guardada no seu navegador (por exemplo, depois de testar um max-age longo por engano), faça assim:
- Digite
chrome://net-internals/#hstsna barra de endereço. - Em Delete domain security policies, digite o domínio (sem https e sem barra) e clique em Delete.
- Em Query HSTS/PKP domain, consulte o mesmo domínio. O resultado deve ser “Not found”.
- Feche e abra o Chrome e teste de novo.
Limites: a exclusão só vale para a política aprendida pelo navegador. Domínios da lista de preload não podem ser apagados por ali. E, se o site continuar enviando o cabeçalho, a política volta na próxima visita em HTTPS. Para o erro sumir para todos, corrija o certificado no servidor. Esse caminho também funciona no Edge, trocando por edge://net-internals/#hsts.
HSTS e o “Sempre usar conexões seguras” do Chrome
São coisas diferentes. Em outubro de 2025, o Google anunciou que o Chrome 154, com lançamento previsto para outubro de 2026, ativaria por padrão a opção “Sempre usar conexões seguras” para sites públicos: o navegador tenta HTTPS primeiro e pede permissão antes de abrir um site que só funciona em HTTP. O visitante pode desligar a opção e prosseguir. Já o HSTS é uma ordem do próprio site, vale em todos os navegadores compatíveis e não deixa ninguém contornar erros de certificado. Um não substitui o outro.
Perguntas frequentes
HSTS é a sigla de HTTP Strict Transport Security (Segurança Restrita de Transporte). É um cabeçalho que manda o navegador acessar o site só por HTTPS durante o tempo definido em max-age.
Porque o site ativou HSTS e, nesse momento, apresentou um problema de certificado (vencido, inválido ou de outro domínio). Com HSTS, o navegador não permite ignorar o erro; quem resolve é o dono do site, corrigindo o certificado. Você pode conferir o certificado no verificador de SSL.
Publique o cabeçalho com max-age=0 em HTTPS e mantenha o HTTPS funcionando até os visitantes voltarem ao site e receberem o novo valor. Se o domínio estiver na lista de preload, também é preciso pedir a remoção em hstspreload.org, o que leva meses.
Não. O HSTS depende de um certificado SSL/TLS válido: ele só obriga o navegador a usar o HTTPS que o certificado já oferece. Sem certificado válido, o HSTS deixa o site inacessível.
Rode curl -sI https://dominio e procure a linha strict-transport-security, ou abra o DevTools do Chrome e veja os cabeçalhos de resposta. Também dá para consultar o domínio em chrome://net-internals/#hsts.