# Forçar HTTPS no WordPress em 4 camadas seguras

Forçar <strong>HTTPS</strong> no WordPress exige quatro camadas: certificado válido, redirecionamento 301, correção de conteúdo misto e HSTS. Segundo a Let's Encrypt (2025), os page loads em HTTPS subiram de 39% para cerca de 80% globais em dez anos. Pular a correção de conteúdo misto deixa o cadeado quebrado mesmo com SSL ativo. Faça as quatro camadas na ordem para travar o tráfego.

Forçar HTTPS no WordPress significa garantir que todo o tráfego do site use conexão criptografada, sem nenhuma rota residual em HTTP. Não basta instalar o certificado SSL: o navegador precisa ser redirecionado, o banco de dados precisa de URLs limpas e o cabeçalho HSTS precisa instruir o navegador a nunca mais tentar HTTP. Nos tickets de suporte da FULL, o erro mais comum é parar na primeira camada e achar que terminou. Este tutorial cobre as quatro camadas na ordem certa, com CVEs reais dos plugins SSL e o checklist de validação que usamos no <a href="https://full.services/seguranca-no-wordpress-guia-completo-para-proteger-seu-site/">guia completo de segurança no WordPress</a>. Para o contexto amplo, veja os <a href="https://full.services/seguranca-wordpress/">guias de segurança WordPress da FULL</a>.

---

## Primeiros passos: Visão geral das 4 camadas

Forçar HTTPS no WordPress de forma definitiva depende de 4 camadas que falham em pontos diferentes: na maioria dos sites que chegam ao suporte da FULL com "cadeado quebrado", o certificado está correto e o problema é conteúdo misto ou redirecionamento incompleto.

A tabela abaixo mapeia cada camada, seu objetivo e o teste que confirma que ela funcionou. Trate as 4 camadas em sequência, porque ativar HSTS antes de limpar o conteúdo misto trava o site no navegador sem opção de voltar.

<table id="etapas-forcar-https-wordpress">
  <caption>Forçar HTTPS no WordPress: 4 camadas, objetivo e validação</caption>
  <thead>
    <tr>
      <th scope="col">Camada</th>
      <th scope="col">Objetivo</th>
      <th scope="col">Check de validação</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th scope="row">Certificado SSL</th>
      <td>Emitir e instalar o certificado no domínio</td>
      <td>Nota A no SSL Labs Test</td>
    </tr>
    <tr>
      <th scope="row">Redirecionamento 301</th>
      <td>Enviar todo HTTP para HTTPS sem loop</td>
      <td>curl -I retorna 301 para HTTPS</td>
    </tr>
    <tr>
      <th scope="row">Conteúdo misto</th>
      <td>Limpar URLs HTTP no banco e nos assets</td>
      <td>Console do navegador sem warning</td>
    </tr>
    <tr>
      <th scope="row">HSTS</th>
      <td>Instruir o navegador a só usar HTTPS</td>
      <td>Header Strict-Transport-Security presente</td>
    </tr>
  </tbody>
</table>

As ferramentas do fluxo são gratuitas: SSL Labs Test, Mozilla Observatory e Cloudflare.

---

## Como instalar o certificado SSL antes de forçar HTTPS

<p class="wp-caption-text">Legenda: o certificado válido é a base. Sem ele, forçar HTTPS gera erro de conexão não privada no navegador.</p>

Instalar o certificado é a camada zero: sem um certificado válido, qualquer redirecionamento para HTTPS gera o aviso "sua conexão não é privada" e derruba o tráfego. A maioria das hospedagens emite um certificado gratuito da Let's Encrypt em poucos minutos pelo painel, com renovação automática a cada 90 dias.

Confirme a emissão antes de seguir, porque as próximas 3 camadas pressupõem um certificado ativo. O passo a passo está no tutorial de <a href="https://full.services/como-obter-certificado-ssl-gratuito-site-wordpress/">certificado SSL gratuito para WordPress</a>, e a alternativa via Let's Encrypt no <a href="https://full.services/instalar-ssl-gratis-do-lets-encrypt-no-wordpress/">guia de SSL grátis</a>. Segundo a <a href="https://letsencrypt.org/docs/" rel="noopener" target="_blank">documentação oficial da Let's Encrypt</a>, o protocolo ACME renova o certificado sem intervenção manual, o que elimina a falha clássica de certificado expirado.

---

## Por que o redirecionamento 301 precisa ser forçado no servidor

O redirecionamento 301 é a camada que envia todo acesso HTTP para HTTPS de forma permanente, e ele precisa rodar antes de qualquer plugin carregar. Um redirecionamento por PHP funciona, mas adiciona até 50 ms de latência; o ideal é forçar no servidor, via .htaccess no Apache ou bloco server no Nginx.

A regra clássica no .htaccess usa `RewriteCond %{HTTPS} off` seguida de `RewriteRule` para HTTPS com flag R=301. O risco real aparece atrás de proxy reverso: redirecionamento 301 forçado no .htaccess sem checar o header `X-Forwarded-Proto` em servidor atrás de proxy reverso resulta em loop infinito de redirecionamento, com o navegador retornando ERR_TOO_MANY_REDIRECTS. Nesses casos, a condição correta passa a ser `RewriteCond %{HTTP:X-Forwarded-Proto} !https`. Teste sempre com `curl -I` antes de confiar no resultado, e nunca empilhe regras de 301 de plugin e de servidor ao mesmo tempo, porque a dupla camada gera redirecionamento conflitante e intermitente em parte das requisições.

---

## Como forçar HTTPS no WordPress passo a passo

Forçar HTTPS no WordPress de ponta a ponta leva de 10 a 30 minutos em um site pequeno, e os quatro passos abaixo cobrem desde a configuração da URL até a ativação do HSTS. Execute na ordem: alterar a URL antes de redirecionar evita que o WordPress gere links absolutos em HTTP e recrie conteúdo misto. Cada passo tem um check objetivo de validação.

### Passo 1: Configure a URL do site para HTTPS

Acesse Configurações, Geral e altere "Endereço do WordPress" e "Endereço do Site" de HTTP:// para https://. Em sites com acesso travado, edite o wp-config.php e defina `WP_HOME` e `WP_SITEURL` com a URL HTTPS. Esse passo faz o WordPress gerar todos os novos links em HTTPS e é pré-requisito para os próximos.

### Passo 2: Force o redirecionamento 301 no .htaccess

Adicione a regra de RewriteCond e RewriteRule no topo do .htaccess, acima do bloco do WordPress. Se o site estiver atrás de Cloudflare ou proxy, use a condição com `X-Forwarded-Proto`. Valide com `curl -I http://seusite.com` e confirme o retorno `301` apontando para o destino HTTPS.

### Passo 3: Limpe o conteúdo misto no banco de dados

Rode um search-replace para trocar `http://seusite.com` por `https://seusite.com` em todas as tabelas. Via WP-CLI, o comando é `wp search-replace 'http://seusite.com' 'https://seusite.com' --all-tables --dry-run` antes de aplicar. Isso elimina URLs absolutas hardcoded de imagens e CSS que mantêm o cadeado quebrado.

### Passo 4: Ative o cabeçalho HSTS

Adicione `Strict-Transport-Security: max-age=31536000; includeSubDomains` no .htaccess ou no Nginx. Só ative depois que os passos 1 a 3 estiverem validados, porque o HSTS instrui o navegador a recusar HTTP por um ano. Confirme o header com o Mozilla Observatory.

---

## Conteúdo misto: Por que o cadeado quebra mesmo com SSL

<p class="wp-caption-text">Legenda: o aviso de mixed content no console é a causa nº 1 do cadeado quebrado após migração para HTTPS.</p>

Conteúdo misto acontece quando uma página em HTTPS carrega recursos via protocolo inseguro, e é a causa que aparece em cerca de metade dos chamados de "SSL não funciona" no suporte da FULL. O navegador exibe o cadeado quebrado e, em scripts, bloqueia o recurso por completo, sem erro visível no admin.

A relação técnica é direta: assets inseguros hardcoded no banco, somados a uma página segura, resultam em cadeado quebrado e bloqueio de scripts pelo navegador. A correção definitiva é o search-replace do Passo 3, não um plugin que reescreve a saída em tempo real, porque esse tipo de plugin tende a mascarar o problema sem limpar a origem. Para diagnosticar rápido, abra o console (F12) e procure os warnings de "Mixed Content". O tutorial de <a href="https://full.services/como-adicionar-cabecalhos-de-seguranca-http-no-wordpress-guia-do-iniciante/">cabeçalhos de segurança HTTP no WordPress</a> complementa a limpeza com a política Content-Security-Policy.

---

## Plugins SSL: Vulnerabilidades reais e o que isso ensina

O plugin de SSL mais usado, o Really Simple SSL, já teve 4 CVEs catalogados ao longo dos anos, sendo 1 deles crítico, segundo o perfil público do WPVulnerability. O dado importa pela lição de processo, não pelo alarme: todas estão corrigidas nas versões atuais.

Um histórico de CVEs corrigidas sinaliza auditoria ativa, não fragilidade. A FULL fala disso com autoridade direta porque é a única empresa brasileira reconhecida como CNA (CVE Numbering Authority) sob a CISA desde maio de 2022, ou seja, está autorizada a atribuir IDs CVE oficiais. O risco real está sempre na versão desatualizada, nunca na falha já corrigida.

O caso mais sério foi a <a href="https://nvd.nist.gov/vuln/detail/CVE-2024-10924" rel="noopener" target="_blank">CVE-2024-10924</a>, com CVSS 9.8 (crítico), que permitia bypass de autenticação e afetava as versões 9.0.0 a 9.1.1.1 do Really Simple SSL. Outra foi a <a href="https://nvd.nist.gov/vuln/detail/CVE-2025-24623" rel="noopener" target="_blank">CVE-2025-24623</a>, CVSS 4.3, corrigida na 9.2.0. A leitura defensiva é direta: forçar HTTPS sem manter o plugin atualizado troca um risco por outro. Mantenha atualizações automáticas ativas, como no <a href="https://full.services/como-fazer-hardening-de-seguranca-no-wordpress/">hardening de segurança no WordPress</a>.

---

## Como manter o HTTPS sem gerenciar plugin por plugin

Manter o HTTPS travado e os plugins de segurança atualizados em escala é onde o tempo do administrador some. O plano PRO da FULL sai por R$849,90 e cobre até 10 sites, o que dá cerca de R$85 por site, com os plugins de segurança e SSL gerenciados de forma centralizada.

A gente vê no suporte que o site não cai por falta de certificado, e sim por plugin de SSL desatualizado meses depois da migração. O bundle resolve a manutenção, não a hospedagem: a FULL gerencia a camada de segurança e os plugins, complementando a sua hospedagem atual. Conheça os <a href="https://full.services/planos">planos da FULL</a> e o <a href="https://full.services/solucoes/all-in-one-security">All in One Security</a> incluso no pacote.

Antes de fechar, rode uma verificação independente. Escaneie seu WordPress gratuitamente e descubra se algum plugin de SSL ou segurança está em versão vulnerável com o <a href="https://security.full.services">FULL Scan</a>, sem instalar nada.

---

<aside aria-label="Resumo Técnico">
<h2 id="resumo-tecnico">Resumo técnico das 4 camadas de HTTPS</h2>
<ul style="margin-bottom:1.5rem">
  <li><strong>Melhor cenário:</strong> site novo, certificado emitido no painel, URL já em HTTPS desde a instalação, sem conteúdo misto a limpar.</li>
  <li><strong>Pior cenário:</strong> site antigo migrado de HTTP sem search-replace, com imagens e CSS hardcoded em HTTP no banco de dados.</li>
  <li><strong>Principal conflito:</strong> ativar HSTS com includeSubDomains antes de garantir certificado válido em todos os subdomínios derruba o subdomínio sem bypass.</li>
  <li><strong>Melhor alternativa gratuita:</strong> Really Simple SSL na versão atual, para quem não quer editar o .htaccess manualmente.</li>
  <li><strong>Em uma frase:</strong> forçar HTTPS exige certificado, redirecionamento 301, limpeza de conteúdo misto e HSTS, nessa ordem.</li>
</ul>
</aside>

## Decisão rápida: Qual camada priorizar primeiro

<ul class="arvore-decisao" style="margin-bottom:1.5rem">
  <li><strong>Se o site é novo e já nasceu em HTTPS</strong> → pule para o Passo 4 e ative o HSTS direto.</li>
  <li><strong>Se o cadeado está quebrado com SSL ativo</strong> → o problema é conteúdo misto, vá ao Passo 3 e rode o search-replace.</li>
  <li><strong>Se o site está atrás de Cloudflare ou proxy</strong> → evite a regra padrão do .htaccess, use a condição com X-Forwarded-Proto.</li>
  <li><strong>Se você não quer editar arquivos do servidor</strong> → use o Really Simple SSL atualizado e valide depois no SSL Labs Test.</li>
</ul>

---

<h2 id="faq">Perguntas frequentes sobre forçar HTTPS no WordPress</h2>

<details>
  <summary>É possível forçar HTTPS no WordPress sem instalar plugin?</summary>
  <p>Sim, é possível e até recomendado em servidores próprios. Você força HTTPS editando o .htaccess no Apache com uma regra RewriteCond e RewriteRule de 301, mais o cabeçalho HSTS, sem nenhum plugin. Esse método é mais rápido que o redirecionamento por PHP porque roda antes do WordPress carregar. O plugin Really Simple SSL só é mais prático para quem não tem acesso ao servidor ou quer evitar editar arquivos manualmente.</p>
</details>

<details>
  <summary>Por que o cadeado continua quebrado mesmo com SSL instalado?</summary>
  <p>O cadeado quebra por conteúdo misto: a página carrega em HTTPS, mas puxa imagens, CSS ou scripts em http://. Isso acontece quando o banco de dados guarda URLs absolutas em HTTP, comum em sites migrados sem search-replace. O navegador detecta o recurso inseguro e quebra o cadeado, e em scripts ele bloqueia o recurso. A correção é rodar o search-replace em todas as tabelas, trocando HTTP:// por https://, e não confiar só na ativação do certificado.</p>
</details>

<details>
  <summary>Qual a diferença entre redirecionamento 301 e HSTS no WordPress?</summary>
  <p>O redirecionamento 301 envia o usuário de HTTP para HTTPS a cada acesso, mas o navegador ainda tenta HTTP primeiro. O HSTS é um cabeçalho que instrui o navegador a nunca mais tentar HTTP por um período definido, como `max-age=31536000` (um ano). O 301 corrige o acesso; o HSTS previne o acesso inseguro na origem. Ative o HSTS só depois que o 301 e a limpeza de conteúdo misto estiverem validados, porque ele é difícil de reverter.</p>
</details>

<details>
  <summary>Quanto tempo leva para forçar HTTPS em todo o site?</summary>
  <p>Em um site pequeno, forçar HTTPS leva de 10 a 30 minutos no total: poucos minutos para emitir o certificado pelo painel, alguns para o redirecionamento 301 e o restante para o search-replace e o HSTS. Sites grandes, com muitas URLs hardcoded no banco, podem levar mais por causa da limpeza de conteúdo misto. O gargalo quase nunca é o certificado, e sim encontrar e corrigir todos os recursos servidos em HTTP no conteúdo antigo.</p>
</details>

<details>
  <summary>O que é conteúdo misto e como ele afeta o HTTPS?</summary>
  <p>Conteúdo misto é quando uma página servida em HTTPS carrega recursos em http://, como imagens, fontes ou scripts. Isso afeta o HTTPS de duas formas: o navegador quebra o cadeado de segurança e, no caso de scripts e iframes, bloqueia o recurso por completo, o que pode quebrar o layout. A causa raiz costuma ser URLs absolutas em HTTP salvas no banco de dados. A solução é o search-replace em todas as tabelas, não um plugin que mascara a saída em tempo de execução.</p>
</details>

---

## Próximos passos para travar o HTTPS no seu site

Forçar HTTPS no WordPress não termina na primeira camada: certificado, redirecionamento 301, limpeza de conteúdo misto e HSTS formam a sequência que trava o tráfego de ponta a ponta. A causa nº 1 de cadeado quebrado é conteúdo misto, não o certificado, então valide cada camada com SSL Labs Test e Mozilla Observatory antes de declarar a migração concluída. Se o Google já sinalizou o site, o passo seguinte é <a href="https://full.services/como-corrigir-alertas-de-seguranca-no-google-para-wordpress/">corrigir os alertas de segurança no Google</a>. Para continuar aprendendo, o <a href="https://full.services/academy/">FULL Academy</a> reúne os tutoriais, guias e reviews de segurança em um só lugar, e o <a href="https://full.services/guias/guia-de-seguranca-para-wordpress">guia de segurança para WordPress</a> organiza o caminho completo.
