O maior portal de MU Online do Brasil — desde 2003
Tutorial Intermediário Infra

Como resolver erro de certificado SSL inválido no site e launcher do seu servidor de MU Online

Diagnostique e corrija erros de certificado SSL/TLS inválido, expirado ou mal configurado no site, painel de conta e API do seu servidor de MU Online, incluindo renovação via Let's Encrypt e configuração correta no Nginx/Apache.

BR Bruno · Atualizado em 20 set 2024 · ⏱ 14 min de leitura
Resposta rápida

Um erro de certificado SSL/TLS inválido é um dos problemas de infraestrutura mais visíveis (e mais prejudiciais à reputação) que um servidor privado de MU Online pode enfrentar: o jogador abre o site para criar conta ou acessar o painel e recebe um aviso vermelho de "conexão não é privada" ou "site

Um erro de certificado SSL/TLS inválido é um dos problemas de infraestrutura mais visíveis (e mais prejudiciais à reputação) que um servidor privado de MU Online pode enfrentar: o jogador abre o site para criar conta ou acessar o painel e recebe um aviso vermelho de "conexão não é privada" ou "site inseguro". Além de assustar novos jogadores, isso pode bloquear completamente o cadastro em navegadores mais restritivos. Este tutorial cobre o diagnóstico da causa exata do erro, a correção via renovação/reemissão de certificado, e a configuração correta no Nginx e Apache para que isso não volte a acontecer.

Como o SSL/TLS funciona na prática do seu servidor

Quando um jogador acessa https://seusite.com, o navegador espera receber um certificado digital válido, emitido por uma Autoridade Certificadora (CA) reconhecida, que prove que o domínio é realmente controlado por quem diz ser. O certificado tem três elementos que geram erro se estiverem incorretos: validade (dentro do prazo), domínio (bate exatamente com o que está sendo acessado, incluindo www ou não) e cadeia de confiança (o certificado intermediário da CA está instalado corretamente no servidor).

Diagnosticando o tipo exato de erro

Antes de sair renovando certificado às cegas, identifique a mensagem exata — cada uma aponta para uma causa diferente:

Mensagem no navegadorCausa mais provável
"NET::ERR_CERT_DATE_INVALID"Certificado expirado
"NET::ERR_CERT_COMMON_NAME_INVALID"Certificado emitido para domínio diferente (ex.: sem www, ou domínio errado)
"NET::ERR_CERT_AUTHORITY_INVALID"Cadeia de certificação intermediária não instalada / certificado autoassinado
"Sua conexão não é totalmente segura" (conteúdo misto)Página HTTPS carregando recursos (imagens, scripts) via HTTP
Erro só no launcher, site normalAPI/subdomínio usado pelo launcher sem certificado próprio

Passo 1 — Verificar a validade e os detalhes do certificado atual

No navegador, clique no cadeado (ou no aviso de erro) → "Certificado" para ver a data de expiração e o domínio exato coberto. Via terminal, é mais rápido e confiável:

echo | openssl s_client -servername seusite.com -connect seusite.com:443 2>/dev/null | openssl x509 -noout -dates -subject

Isso retorna a data de início/expiração (notBefore/notAfter) e o subject (domínio para o qual o certificado foi emitido). Se o subject não bater exatamente com a URL acessada, esse é o problema.

Passo 2 — Corrigir certificado expirado com Let's Encrypt + Certbot

Para servidores rodando Nginx em Linux, a renovação/emissão via Certbot é o caminho mais direto:

sudo apt update && sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d seusite.com -d www.seusite.com

O Certbot detecta automaticamente os blocos server do Nginx, emite o certificado e ajusta a configuração para servir HTTPS. Para garantir que isso não expire de novo sem aviso, configure a renovação automática:

sudo systemctl enable certbot.timer
sudo systemctl start certbot.timer
sudo certbot renew --dry-run

O --dry-run simula a renovação sem aplicar de fato, confirmando que o processo automático vai funcionar quando o certificado estiver perto de expirar (Let's Encrypt renova automaticamente ~30 dias antes do vencimento).

Passo 3 — Corrigir domínio incompatível (Common Name Invalid)

Se o erro for ERR_CERT_COMMON_NAME_INVALID, o certificado foi emitido apenas para uma variação do domínio (ex.: só www.seusite.com, mas o jogador acessa seusite.com sem o www, ou vice-versa). A correção é reemitir incluindo todas as variações necessárias:

sudo certbot --nginx -d seusite.com -d www.seusite.com -d painel.seusite.com

Alternativamente, configure um redirecionamento permanente (301) da variante sem certificado para a que tem, evitando manter múltiplos domínios ativos desnecessariamente.

Passo 4 — Instalar corretamente a cadeia intermediária (Apache)

Em servidores Apache, um erro comum é instalar apenas o certificado do domínio (cert.pem) sem o certificado intermediário da CA (chain.pem ou fullchain.pem), gerando ERR_CERT_AUTHORITY_INVALID mesmo com certificado válido. A configuração correta no VirtualHost:

<VirtualHost *:443>
    ServerName seusite.com
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/seusite.com/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/seusite.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/seusite.com/chain.pem
</VirtualHost>

Usar o fullchain.pem (que já combina certificado + cadeia) no lugar de cert.pem + chain.pem separados é a abordagem mais simples e menos propensa a erro em versões recentes do Apache e Nginx.

Passo 5 — Configuração equivalente e mais robusta no Nginx

server {
    listen 443 ssl http2;
    server_name seusite.com www.seusite.com;

    ssl_certificate     /etc/letsencrypt/live/seusite.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/seusite.com/privkey.pem;
    ssl_protocols       TLSv1.2 TLSv1.3;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    location / {
        proxy_pass http://127.0.0.1:3000;
    }
}

server {
    listen 80;
    server_name seusite.com www.seusite.com;
    return 301 https://$host$request_uri;
}

O segundo bloco garante que qualquer acesso via HTTP puro seja redirecionado automaticamente para HTTPS, evitando que o jogador acesse a versão insegura por engano.

Passo 6 — Corrigir conteúdo misto (mixed content)

Se o cadeado aparece "quebrado" mesmo com certificado válido, o problema costuma ser conteúdo misto: a página é carregada via HTTPS, mas referencia imagens, scripts ou fontes via http:// explícito. A correção é trocar todas as URLs absolutas hardcoded no HTML/CSS/JS para protocolo relativo ou HTTPS explícito:

<!-- Errado -->
<script src="http://seusite.com/assets/launcher.js"></script>

<!-- Correto -->
<script src="https://seusite.com/assets/launcher.js"></script>

Ferramentas como o DevTools do navegador (aba Console/Security) listam exatamente quais recursos estão sendo bloqueados por conteúdo misto.

Passo 7 — Cobrir subdomínios usados pelo launcher e API

Se o launcher consome uma API em api.seusite.com ou painel.seusite.com, cada subdomínio precisa do seu próprio certificado válido (ou um wildcard cobrindo todos). Para simplificar a manutenção com múltiplos subdomínios:

sudo certbot --nginx -d seusite.com -d www.seusite.com -d api.seusite.com -d painel.seusite.com

Ou, para um wildcard (requer validação DNS, não HTTP):

sudo certbot certonly --manual --preferred-challenges dns -d "*.seusite.com" -d seusite.com

Monitoramento contínuo de expiração

Não confie apenas na renovação automática — configure um alerta externo. Serviços gratuitos como UptimeRobot ou um script simples de cron que roda o comando openssl do Passo 1 semanalmente e envia alerta ao Discord da equipe caso a expiração esteja a menos de 15 dias evitam surpresas.

Erros comuns e soluções

SintomaCausa provávelSolução
"Conexão não é privada" no siteCertificado expiradoRenovar via certbot renew e ativar certbot.timer
Erro só ao acessar sem "www"Certificado não cobre ambas as variantes do domínioReemitir incluindo -d seusite.com -d www.seusite.com
Cadeado quebrado mesmo com certificado válidoConteúdo misto (recursos via HTTP)Trocar URLs hardcoded para HTTPS
Launcher não conecta à APISubdomínio da API sem certificado próprioEmitir certificado para o subdomínio ou usar wildcard
ERR_CERT_AUTHORITY_INVALIDCadeia intermediária não instaladaUsar fullchain.pem na configuração do servidor web

Checklist de saúde do SSL/TLS

  • Certificado válido e com data de expiração confirmada via openssl.
  • Domínio do certificado cobre todas as variantes acessadas (www e sem www).
  • Cadeia intermediária instalada corretamente (fullchain.pem).
  • Renovação automática configurada e testada com --dry-run.
  • Redirecionamento HTTP → HTTPS ativo em todos os domínios.
  • Nenhum conteúdo misto (recursos HTTP) na página servida via HTTPS.
  • Subdomínios do launcher/API cobertos por certificado válido.
  • Monitoramento externo de expiração configurado.

Com o SSL do site e do launcher estabilizado, vale revisar a segurança geral da sua infraestrutura — firewall, portas expostas e backup do banco — para fechar as brechas mais comuns de um servidor privado. Se ainda não tem a base do servidor documentada, comece pelo guia de criação de servidor de MU Online.

Perguntas frequentes

Por que o navegador mostra 'conexão não é privada' no site do meu servidor?

Geralmente porque o certificado SSL expirou, foi emitido para um domínio diferente do que está sendo acessado (ex.: sem o 'www'), ou a cadeia de certificação intermediária não foi instalada corretamente no servidor web. O primeiro passo é verificar a validade e o domínio exato do certificado.

Let's Encrypt é seguro o suficiente para um servidor de MU Online?

Sim. Let's Encrypt oferece certificados TLS gratuitos e amplamente aceitos por todos os navegadores modernos, com renovação automatizável via Certbot. É a opção mais usada por servidores privados de médio porte por não ter custo e ser fácil de automatizar.

Preciso de SSL só no site ou também no launcher/API?

Idealmente em ambos. Se o launcher consome uma API (para checar atualizações, login web, ranking) sobre HTTP puro, os dados trafegam sem criptografia e ficam vulneráveis a interceptação. Sempre que possível, unifique tudo sob HTTPS com o mesmo certificado ou um certificado wildcard.

O que é um certificado wildcard e quando preciso dele?

Um certificado wildcard (ex.: *.viciadosmu.com) cobre o domínio principal e todos os subdomínios (painel, api, launcher) com um único certificado. Vale a pena quando você tem múltiplos subdomínios ativos, evitando emitir e renovar um certificado separado para cada um.

Certificado expira automaticamente sem eu perceber?

Sim, certificados Let's Encrypt duram 90 dias e não são renovados sozinhos a menos que você configure um cron job ou serviço de renovação automática (via Certbot). Sem isso, o site fica com aviso de 'inseguro' de forma recorrente a cada 3 meses.

BR
Editor de eventos, mapas e itens

Bruno é especialista em eventos, mapas, bosses e economia de itens do MU Online. Documenta cada detalhe com base em jogo real.

Continue lendo

Artigos relacionados