Resolver problemas

O site não aparece como seguro com HTTPS (conteúdo misto)

Revisto a 5 min de leitura conteúdo misto SSL

Partimos do princípio de que o seu site já está configurado para usar https:// com o seu certificado SSL. O normal é que o navegador o mostre como seguro:

Navegador a mostrar a ligação do site como segura

Mas, por vezes, embora o endereço comece por https://, o navegador mostra um aviso, ou o site aparece «deformado» porque as folhas de estilo, as imagens ou os ficheiros JavaScript não carregam:

Site com HTTPS que o navegador não mostra como seguro por causa do conteúdo misto

É o que se chama conteúdo misto: a página é carregada por HTTPS, mas dentro tem ligações a imagens, CSS, JavaScript ou outros recursos que são pedidos por http://. Os navegadores bloqueiam os scripts e estilos que chegam por HTTP e, até que todos os recursos sejam carregados por HTTPS, não mostram o site como seguro.

Localizar os recursos com http://

Abra o site no Chrome ou no Firefox, prima F12 e entre no separador Consola. Recarregue a página: cada recurso com problema aparece com um aviso «Mixed Content» e o seu endereço http:// completo. Explicamo-lo com mais detalhe em como usar a consola do navegador.

Com essa lista já sabe o que tem de corrigir. O habitual é que as ligações estejam:

  • Na base de dados da aplicação (conteúdo de páginas e artigos, definições com o URL do site).
  • Nos ficheiros do tema ou do modelo, incluindo os CSS (por exemplo, uma imagem de fundo com url(http://...)).
  • Em recursos de outros sites (tipos de letra, scripts, imagens externas).

Corrigi-lo no WordPress

  1. Em Definições > Geral, verifique se Endereço do WordPress (URL) e Endereço do site (URL) começam por https://.

  2. Altere as ligações antigas da base de dados com o plugin Better Search Replace. Em Ferramentas > Better Search Replace:

    • Search for: http://tudominio.com
    • Replace with: https://tudominio.com
    • Selecione todas as tabelas.
    • Faça primeiro uma passagem com Run as dry run? marcado para ver quantas alterações fará e, depois, desmarque-o e execute.

    Repita com http://www.tudominio.com se o seu site usava o www. Faça antes uma cópia da base de dados. Este plugin respeita os dados serializados do WordPress; não o faça com um UPDATE no phpMyAdmin, porque os estragaria.

    Se tiver acesso por SSH, pode fazer o mesmo com o WP-CLI:

wp search-replace 'http://tudominio.com' 'https://tudominio.com' --all-tables --dry-run
wp search-replace 'http://tudominio.com' 'https://tudominio.com' --all-tables
  1. Esvazie a cache do WordPress (plugin de cache) e a do navegador, e volte a ver a consola.

Se restarem avisos, costumam vir do tema ou de um plugin com o endereço escrito no seu código ou nos seus CSS: corrija-o nesse ficheiro ou nas definições do tema.

Como solução rápida enquanto corrige a origem, o plugin SSL Insecure Content Fixer reescreve as ligações http:// para https:// ao servir a página. Nas suas definições (Definições > SSL Insecure Content), comece pelo nível Simple e suba para Content ou Widgets se não bastar.

Corrigi-lo em qualquer outro site

Para qualquer aplicação (PrestaShop, Joomla, um site feito à mão…), altere as ligações http:// que a consola mostra na configuração, na base de dados ou nos ficheiros do tema.

Entretanto, pode pedir ao navegador que carregue por HTTPS todos os recursos da página, adicionando esta linha no início do ficheiro .htaccess do site:

Header always set Content-Security-Policy "upgrade-insecure-requests"

Só funciona com recursos que também estejam disponíveis por HTTPS. Se um site externo não tiver HTTPS, esse recurso continuará sem carregar: descarregue-o e carregue-o para o seu alojamento, ou substitua-o por outro.

Verificar que funciona

Volte a abrir o site com a consola aberta: não deve restar nenhum aviso «Mixed Content» e o navegador deve mostrar a ligação como segura. Reveja também alguma página interna, o formulário de contacto e, se for uma loja, o carrinho.

Também lhe pode ser útil

Algo não bate certo ou mudou? Diga-nos e revemos.