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

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:

  1. 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.
  2. 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.
  3. Renova o prazo a cada visita. Cada resposta com o cabeçalho reinicia a contagem do max-age.
hsts política

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:

EtapaSem HSTSCom HSTS
Usuário digita o endereço sem httpsNavegador envia pedido em HTTP pela redeNavegador converte para HTTPS antes de enviar
Atacante na mesma redeIntercepta o pedido e responde em HTTP, conversando com o site real em HTTPSNão vê pedido em HTTP para interceptar
Login e cookies de sessãoTrafegam sem criptografia e podem ser roubadosSeguem cifrados
Certificado falso apresentadoUsuário pode clicar em “continuar”Navegador bloqueia sem opção de prosseguir
hsts proteção

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. 31536000 equivale a um ano. max-age=0 desativa a política (mas só depois que o navegador receber esse valor por HTTPS).
  • includeSubDomains: estende a regra a todos os subdomínios, como www, loja, webmail ou intranet. 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:

  1. 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.
  2. Abra o Gerenciador de Arquivos, ative “mostrar arquivos ocultos” e edite o .htaccess do site.
  3. 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):

  1. No painel, vá em SSL/TLS > Edge Certificates.
  2. Em HTTP Strict Transport Security (HSTS), clique em Enable HSTS, leia o aviso e confirme.
  3. 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-age de pelo menos 31536000 (1 ano), includeSubDomains e preload.
  • 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çãoO que acontece com HSTS ativoComo evitar
Certificado vence ou é instalado erradoVisitante não consegue ignorar o erro e entrarRenovação automática e monitoramento da validade
Subdomínio sem HTTPS com includeSubDomainsSubdomínio para de abrir (painel antigo, sistema interno, câmera, impressora)Mapear todos os subdomínios do DNS antes
Voltar o site para HTTPQuem já visitou não consegue acessar até o max-age acabarPublicar max-age=0 em HTTPS antes da mudança
Domínio na lista de preloadRegra vale para todos os visitantes, mesmo os novosSó 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:

  1. Digite chrome://net-internals/#hsts na barra de endereço.
  2. Em Delete domain security policies, digite o domínio (sem https e sem barra) e clique em Delete.
  3. Em Query HSTS/PKP domain, consulte o mesmo domínio. O resultado deve ser “Not found”.
  4. 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

O que significa HSTS?

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.

Por que o Chrome diz que não posso acessar o site porque ele usa HSTS?

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.

Como desativar o HSTS do meu site?

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.

HSTS substitui o certificado SSL?

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.

Como saber se um site usa HSTS?

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.