Skip to content
mobius1qwe edited this page Oct 15, 2026 · 4 revisions

Criar um certificado

Home > HTTPS > Criar um certificado

Em uma frase: gerar o par certificado + chave que o servidor usa no HTTPS: autoassinado (rede interna, por IP) ou do Let's Encrypt (domínio público).

Tip

Na 2.0 🚧 o certificado automático cria e renova o autoassinado sozinho, sem openssl.

Autoassinado, com openssl

O openssl vem com o Git para Windows (C:\Program Files\Git\usr\bin\openssl.exe) e já está no Linux. Um comando só (no Prompt do Windows; no PowerShell troque ^ por `; no Linux, por \):

openssl req -x509 -newkey rsa:2048 -sha256 -days 3650 -nodes ^
  -keyout key.pem -out cert.pem ^
  -subj "/CN=meuservidor" ^
  -addext "subjectAltName=DNS:meuservidor,DNS:localhost,IP:127.0.0.1,IP:192.168.1.10" ^
  -addext "keyUsage=digitalSignature,keyEncipherment" ^
  -addext "extendedKeyUsage=serverAuth"
Parte O que faz Mude quando
-days 3650 vale 10 anos quiser trocar com mais frequência
-nodes a chave fica sem senha (o servidor lê sem perguntar) quiser senha: tire, e preencha a senha no motor
subjectAltName os nomes e IPs que valem. O mais importante sempre: liste todo endereço que o cliente usa

Warning

IP se escreve IP:192.168.1.10, nome se escreve DNS:servidor. DNS:192.168.1.10 não funciona e é o erro mais comum. Sem subjectAltName, Windows, Android e navegadores recusam o certificado.

Resultado: cert.pem (certificado, pode distribuir) e key.pem (chave, nunca sai do servidor).

Outros comandos úteis

:: a impressão digital, para o SSL.Pins do cliente
openssl x509 -in cert.pem -noout -fingerprint -sha256

:: o .pfx, para o mORMot2 no Windows e para o http.sys
openssl pkcs12 -export -inkey key.pem -in cert.pem -out cert.pfx -passout pass:minhasenha

:: conferir validade e nomes
openssl x509 -in cert.pem -noout -dates -ext subjectAltName

:: o que um servidor no ar está entregando
openssl s_client -connect 192.168.1.10:9988 -showcerts

Windows antigo (antes do 10) recusa o .pfx? Acrescente -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES -macalg sha1 ao comando do .pfx.

Let's Encrypt (gratuito, para domínio público)

Precisa de um domínio apontando para a máquina (sem domínio, um DNS gratuito como o no-ip serve) e da porta 80 livre durante a geração.

Windows

  1. Instale o certbot.
  2. No Prompt como administrador: certbot certonly --standalone
  3. Informe o domínio quando pedir. Os .pem ficam em C:\Certbot\live\<domínio>\ (fullchain.pem = certificado, privkey.pem = chave).

Linux

sudo snap install --classic certbot      # precisa do snapd
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot certonly --standalone

Os arquivos ficam em /etc/letsencrypt/live/<domínio>/.

Renovar (vale 90 dias)

sudo certbot renew      # Linux
certbot renew           # Windows, como administrador

Depois de renovar, reinicie o servidor RAL (ou o nginx) para ele ler o arquivo novo.

Problemas

O que acontece O que fazer
certbot: porta 80 ocupada pare o serviço que usa a porta durante a geração, ou use certbot certonly --webroot
Windows: nada parece usar a porta 80 e mesmo assim dá erro serviços do sistema (IIS, World Wide Web Publishing) podem segurá-la; pare-os durante a geração
o cliente recusa por nome faltou o nome/IP no subjectAltName
o navegador avisa "não seguro" normal para autoassinado; use Let's Encrypt para site público

Veja também

Clone this wiki locally