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]
Na2.0 🚧o certificado automático cria e renova o
autoassinado sozinho, semopenssl.
opensslO 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 escreveIP:192.168.1.10, nome se escreveDNS:servidor.DNS:192.168.1.10
não funciona e é o erro mais comum. SemsubjectAltName, Windows, Android e
navegadores recusam o certificado.
Resultado: cert.pem (certificado, pode distribuir) e key.pem (chave, nunca
sai do servidor).
:: 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.
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.
certbot certonly --standalone.pem ficam emC:\Certbot\live\<domínio>\ (fullchain.pem = certificado, privkey.pem = chave).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>/.
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.
| 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 |