Um certificado auto-assinado e aquele que você mesmo cria — você atua como sua própria Autoridade Certificadora. Um certificado assinado por CA e emitido é assinado por uma Autoridade Certificadora confiavel (como Let’s Encrypt ou DigiCert) que os navegadores já confiam.
A diferenca prática: certificados auto-assinados disparam avisos de segurança no navegador. Certificados assinados por CA não.
Comparacao
| Auto-assinado | Assinado por CA | |
|---|---|---|
| Criado por | Você (comando openssl) | Uma CA confiavel |
| Confiança do navegador | ❌ Aviso: “Não confiavel” | ✅ Icone de cadeado |
| Forca da criptografia | Mesma | Mesma |
| Custo | Gratuito | Gratuito (Let’s Encrypt) ou pago |
| Válidação | Nenhuma — você atesta por si mesmo | CA verifica domínio/organização |
| Caso de uso | Desenvolvimento, interno, testes | Sites em producao |
| Renovação | Manual (você define a validade) | 90 dias (LE) ou 1 ano (pago) |
| Proteção contra man-in-the-middle | ⚠️ Fraca — usuarios treinados a clicar em avisos | ✅ Forte — avisos apenas em problemas reais |
Por que certificados auto-assinados mostram avisos
Os navegadores confiam em certificados com base em quem os assinou. Seu sistema operacional e navegador vem com uma lista de ~100-150 CAs raiz confiaveis. Quando um servidor apresenta um certificado assinado por uma dessas CAs, o navegador mostra um cadeado.
Um certificado auto-assinado não é assinado por nenhuma CA confiavel — é assinado por sua própria chave privada. O navegador não tem como verificar que o certificado e legitimo, entao mostra um aviso. Este e o comportamento correto — sem verificação da CA, qualquer pessoa poderia criar um certificado alegando ser google.com.
Quando usar certificados auto-assinados
Serviços internos
Serviços que não sao expostos a internet — dashboards internos, ferramentas de monitoramento, paineis de administracao de banco de dados. Sua equipe pode adicionar a CA auto-assinada aos seus repositorios de confiança.
Desenvolvimento e testes
HTTPS rápido para desenvolvimento local quando você não quer configurar mkcert. O aviso do navegador e irritante, mas funcional para testes.
IoT e dispositivos embarcados
Dispositivos que se comunicam com um servidor conhecido e podem fixar o certificado — nenhum repositorio de confiança do navegador envolvido.
Redes isoladas (air-gapped)
Redes sem acesso a internet onde o protocolo ACME do Let’s Encrypt não pode alcancar. Auto-assinado e a unica opcao.
Quando NAO usar certificados auto-assinados
Qualquer site público
Usuarios veem um aviso assustador e saem. Mecanismos de busca podem não rastrear páginas HTTPS com certificados não confiaveis. Não ha razao para auto-assinar quando certificados Let’s Encrypt sao gratuitos.
Qualquer site que lida com dados de usuarios
Certificados auto-assinados treinam usuarios a clicar em avisos de segurança — o oposto de boa segurança. Quando um ataque real dispara um aviso, usuarios habituados a clicar em “Prosseguir mesmo assim” não notarao.
Como criar um certificado auto-assinado
# ECDSA (recomendado)
openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:P-256 \
-keyout key.pem -out cert.pem -days 365 -nodes \
-subj "/CN=internal.example.com" \
-addext "subjectAltName=DNS:internal.example.com,IP:10.0.0.5"
# RSA
openssl req -x509 -newkey rsa:2048 \
-keyout key.pem -out cert.pem -days 365 -nodes \
-subj "/CN=internal.example.com"
Use os resultantes cert.pem e key.pem na configuração do seu servidor. Nota: fullchain.pem e chain.pem não sao necessarios — não ha cadeia com certs auto-assinados.
Melhores alternativas para cada cenario
| Cenario | Em vez de auto-assinado, use |
|---|---|
| Site em producao | Let’s Encrypt via GetHTTPS — gratuito, confiavel, 5 minutos |
| Desenvolvimento local | mkcert — confiavel localmente, sem avisos |
| Serviços internos | Let’s Encrypt (se acessível pela internet) ou uma CA privada |
| Testes/staging | Ambiente staging do Let’s Encrypt — certificados de teste ilimitados |
Certificados auto-assinados faziam sentido quando certificados SSL custavam $100+/ano. Agora que o Let’s Encrypt é gratuito, raramente ha razao para auto-assinar para algo alem de ambientes verdadeiramente isolados.
Perguntas frequentes
Um certificado auto-assinado e menos seguro que um assinado por CA?
A criptografia e identica — mesmos algoritmos, mesmas forcas de chave. A diferenca e confiança: um certificado assinado por CA prova a identidade do servidor via um terceiro confiavel. Um certificado auto-assinado não prova nada — qualquer pessoa pode criar um para qualquer domínio. O problema de segurança não é a criptografia; e a falta de autenticação.
Posso fazer os navegadores confiarem no meu certificado auto-assinado?
Sim, em maquinas que você controla. Importe o certificado (ou uma CA auto-assinada que o assinou) no repositorio de confiança do SO/navegador. Isso e o que o mkcert automatiza. Mas você não pode fazer os navegadores de outras pessoas confiarem nele — isso requer uma CA real.
Meu provedor de hospedagem me deu um certificado auto-assinado. Esta OK?
Não, para um site público. Peca ao seu provedor para habilitar o Let’s Encrypt gratuito (a maioria dos hosts suporta). Se não suportarem, use o GetHTTPS para obter um certificado confiavel por conta própria.
Por que não criar minha própria CA?
Você pode, mas os navegadores não confiarao nela a menos que você passe pelo processo longo e caro de anos para entrar nos repositorios de confiança dos navegadores. Uma CA privada funciona para infraestrutura interna (sua equipe instala o cert raiz), mas não para sites publicos. Para sites publicos, use uma CA confiavel como o Let’s Encrypt.