Como instalar certificado SSL: passo a passo
Passo a passo para instalar certificado SSL em um servidor Debian ou Ubuntu com Nginx ou Apache, com Certbot ou certificado comprado, e redirecionar para HTTPS.
Por Redação Eleven Host · @robson.direitodigital · Atualizado em 18 de outubro de 2026 · 9 min de leitura

Arte: Eleven Host. Certbot ou certificado comprado, Nginx ou Apache: instalar, renovar e redirecionar para HTTPS. Arte: Eleven Host
Como instalar certificado SSL em um servidor Debian ou Ubuntu com Nginx ou Apache? Um caminho direto é o Certbot: ele pede o certificado, ajusta a configuração e agenda a renovação. Quem comprou um certificado usa chave, CSR e cadeia intermediária.
O que precisa estar pronto antes
Este guia é para quem administra o próprio servidor, como uma VPS com Debian ou Ubuntu, com terminal e sudo. O que é o certificado e como ele funciona está no artigo O que é certificado SSL e como ele funciona, e a diferença entre SSL e TLS está em Certificado SSL ou TLS: qual a diferença? Guia.
Antes de qualquer comando, confira três coisas:
- O domínio aponta para o IP do servidor. Os registros A (e AAAA, se você usa IPv6) do domínio e do www precisam levar ao servidor certo.
- O servidor web está instalado, ativo e respondendo pelo nome do domínio.
- A porta 80 está liberada no firewall. A validação por HTTP acontece nela. Libere também a 443, que o HTTPS vai usar.
Para conferir o DNS, rode no próprio servidor:
dig +short exemplo.com
dig +short www.exemplo.com
O resultado deve ser o IP do seu servidor (se o dig não existir, instale o pacote dnsutils). Se vier vazio ou outro IP, corrija o DNS e espere propagar.
Se você usa o ufw como firewall, libere as portas assim (se ele ainda não estiver ativo, não o ligue sem antes liberar a porta do seu acesso SSH):
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw status
Certificado só sai quando o domínio aponta para o servidor e a porta 80 responde: se um dos dois falhar, o resto do tutorial não adianta.
Caminho 1: certificado gratuito com Certbot
O Let's Encrypt emite certificados gratuitos, e o Certbot é o programa que conversa com ele. Instale pelo gerenciador de pacotes da distribuição, junto com o plugin do seu servidor web.
Instalar o Certbot
Para Nginx:
sudo apt update
sudo apt install certbot python3-certbot-nginx
Para Apache:
sudo apt update
sudo apt install certbot python3-certbot-apache
A versão instalada depende da versão da sua distribuição.
Pedir e instalar o certificado
Antes, confirme que o nome do domínio está na configuração do site: server_name no Nginx ou ServerName no Apache. O Certbot usa esse nome para achar o site certo. Depois, rode o comando do seu servidor web.
Nginx:
sudo certbot --nginx -d exemplo.com -d www.exemplo.com
Apache:
sudo certbot --apache -d exemplo.com -d www.exemplo.com
Na primeira vez, o Certbot pede um e-mail para avisos e a aceitação dos termos de uso. Depois valida o domínio pela porta 80, grava o certificado e ajusta o site. Dependendo da versão, ele também pergunta se deve redirecionar o HTTP para o HTTPS. Se perguntar, aceite, mas confira o resultado no passo de redirecionamento, mais abaixo.
Liste os certificados instalados e as datas de vencimento:
sudo certbot certificates
Testar a renovação
Esse certificado precisa ser renovado de tempos em tempos. Em vez de decorar datas, teste se a renovação automática funciona:
sudo certbot renew --dry-run
O dry-run simula a renovação sem trocar o certificado. Se terminar sem erro, a simulação passou nas mesmas condições da renovação real; continue conferindo as datas com o comando certbot certificates. Depois, veja se o agendamento existe. Em Debian e Ubuntu, o pacote registra um timer do systemd ou uma tarefa do cron:
systemctl list-timers | grep certbot
Se o timer não aparecer, veja /etc/cron.d/certbot. Sem nenhum dos dois, a renovação não acontece sozinha: agende o comando certbot renew por conta própria.
Quer um servidor para instalar e renovar o certificado por conta própria? Ver planos de VPS
Caminho 2: certificado comprado, com chave e CSR
Se a sua empresa já tem um certificado emitido por uma autoridade certificadora, ou precisa de um tipo de validação que o gratuito não oferece, o processo muda: você gera uma chave e um pedido de assinatura (CSR), envia o CSR à autoridade, recebe os arquivos e instala tudo à mão.
Gerar a chave privada e o CSR
Crie a chave e o CSR no próprio servidor. A chave privada nunca sai dele e nunca vai por e-mail ou chamado.
sudo openssl req -new -newkey rsa:2048 -nodes -keyout /etc/ssl/private/exemplo.com.key -out exemplo.com.csr
sudo chmod 600 /etc/ssl/private/exemplo.com.key
O openssl faz algumas perguntas. Uma das perguntas é o Common Name: coloque o nome exato do site, como www.exemplo.com ou exemplo.com. Para ver o conteúdo do CSR antes de enviar:
openssl req -in exemplo.com.csr -noout -text
Enviar o CSR e montar a cadeia
Envie à autoridade só o arquivo exemplo.com.csr. Ela vai pedir prova de que o domínio é seu, conforme o tipo de validação escolhido. Depois da validação, você recebe o certificado do seu domínio e o certificado intermediário.
O navegador só confia no seu certificado se conseguir ligá-lo, passo a passo, a uma autoridade que ele já conhece. Essa ligação é a cadeia, e o servidor precisa entregar o seu certificado seguido do intermediário. Junte os dois em um único arquivo, com o seu certificado primeiro:
cat exemplo.com.crt intermediario.crt | sudo tee /etc/ssl/certs/exemplo.com-cadeia.crt
Os nomes exemplo.com.crt e intermediario.crt são ilustrativos: use os nomes dos arquivos que a autoridade enviou.
Apontar o Nginx
No bloco server do site, em /etc/nginx/sites-available/ no layout padrão do Debian e do Ubuntu, adicione estas linhas:
listen 443 ssl;
server_name exemplo.com www.exemplo.com;
ssl_certificate /etc/ssl/certs/exemplo.com-cadeia.crt;
ssl_certificate_key /etc/ssl/private/exemplo.com.key;
Teste a configuração antes de recarregar. Se o teste apontar erro, não recarregue: o servidor segue com a configuração antiga até você corrigir o arquivo.
sudo nginx -t
sudo systemctl reload nginx
Apontar o Apache
No Apache, ative o módulo SSL e crie ou edite o VirtualHost da porta 443 do site:
sudo a2enmod ssl
Se o site é novo, habilite-o também:
sudo a2ensite nome-do-site
Dentro do VirtualHost, use:
SSLEngine on
SSLCertificateFile /etc/ssl/certs/exemplo.com-cadeia.crt
SSLCertificateKeyFile /etc/ssl/private/exemplo.com.key
Aqui, o arquivo em SSLCertificateFile é o que reúne o seu certificado e o intermediário. Versões mais antigas do Apache pedem o intermediário em uma diretiva separada, a SSLCertificateChainFile; confira a versão com apachectl -v e a documentação dela. Valide e recarregue:
sudo apachectl configtest
sudo systemctl reload apache2
Um ponto que muda o dia a dia: o certificado comprado não se renova sozinho. Anote a data de vencimento no calendário da equipe e repita o ciclo de CSR, validação e instalação antes dela.
Redirecionar HTTP para HTTPS
Com o certificado instalado, quem digitar o endereço sem https ainda cai na versão sem segurança. O redirecionamento permanente resolve. Se o Certbot já configurou, só confira.
No Nginx, o bloco server da porta 80 deve ter só estas linhas. Se o seu site ainda tem listen 80 e listen 443 no mesmo bloco, separe em dois: um para a porta 80, com o redirecionamento, e outro para a 443, com o site. Dois blocos com o mesmo nome e a mesma porta geram conflito:
listen 80;
server_name exemplo.com www.exemplo.com;
return 301 https://$host$request_uri;
No Apache, dentro de um VirtualHost da porta 80:
ServerName exemplo.com
ServerAlias www.exemplo.com
Redirect permanent / https://exemplo.com/
Teste a configuração (nginx -t ou apachectl configtest) e recarregue, como nos passos anteriores. Contexto de segurança: Segurança para sites: 10 medidas essenciais.
Como verificar se deu certo
Abra o site com https e clique no cadeado: o nome deve ser o do seu domínio e o vencimento deve estar no futuro. Depois digite o endereço com http e confirme o redirecionamento.
Para uma conferência pelo terminal, que também mostra a cadeia entregue pelo servidor:
echo | openssl s_client -connect exemplo.com:443 -servername exemplo.com
Procure no resultado a linha Verify return code: 0 (ok). Um código diferente de zero indica problema, como cadeia incompleta.
Entenda
- Antes: DNS apontado e portas 80 e 443 liberadas.
- Certbot: instalar, rodar o plugin do seu servidor, testar o dry-run.
- Comprado: chave, CSR, cadeia junto, testar a configuração e só então recarregar.
- Depois: redirecionar para HTTPS e conferir.
Erros comuns e como resolver
- A validação falha com o Certbot. Confira o DNS (IP errado) e a porta 80, no firewall do servidor e em qualquer firewall externo.
- O navegador reclama de cadeia incompleta. O servidor entregou só o seu certificado, sem o intermediário. Monte o arquivo com os dois, como no caminho 2.
- Aviso de nome diferente. O certificado foi emitido para
exemplo.com, mas o visitante abriuwww.exemplo.com. Inclua os dois nomes no pedido. - Cadeado com aviso de conteúdo misto. A página carrega imagens, scripts ou estilos por http. Troque os endereços para https, ou para caminhos relativos.
- O servidor não recarrega. Leia a mensagem do
nginx -tou doapachectl configtest: ela indica o arquivo e a linha com o erro, como um caminho digitado errado ou uma chave que não combina com o certificado.
Para entender o que o cadeado garante e o que ele não garante sobre o resto do site, leia Segurança de sites: guia para quem tem e para quem visita.
Dois exemplos do dia a dia
Blog pessoal em uma VPS com Nginx. O dono aponta o domínio, instala o Certbot com o plugin do Nginx, roda o comando com os dois nomes e termina com o dry-run.
Empresa com exigência de certificado de uma autoridade específica. O responsável de TI gera a chave e o CSR no servidor Apache, envia só o CSR, monta o arquivo com a cadeia e agenda no calendário a renovação, porque ela é manual.
Precisa de um endereço para o certificado? Buscar domínio
Perguntas frequentes
Posso instalar o certificado antes de apontar o domínio?
Não pelo caminho deste guia (validação por HTTP): a validação precisa chegar ao seu servidor pelo nome do domínio. Aponte o DNS primeiro.
O Certbot funciona com Nginx e Apache ao mesmo tempo?
Ele tem um plugin para cada servidor. Use o do servidor que atende o domínio. Se os dois estiverem instalados, confirme qual deles responde nas portas 80 e 443.
Preciso reiniciar o servidor depois de instalar?
Não. Basta testar a configuração e recarregar o serviço, o que não derruba as conexões abertas.
E se o dry-run der erro?
Leia a mensagem: ela aponta a causa, como porta 80 fechada, DNS errado ou site que não responde. Corrija e rode de novo antes de confiar na renovação.
Posso usar o mesmo certificado em dois servidores?
Depende das regras da autoridade que emitiu e do tipo de certificado: confira os termos dela. Com o Certbot, peça um certificado em cada servidor.