SSL/TLS · 10 min read · Nov 17, 2025
Instale o Let's Encrypt e Proteja o Nginx com SSL/TLS no Debian 9
Este tutorial mostrará como instalar e proteger um servidor web Nginx no Debian 9 com um certificado TLS emitido gratuitamente pela Autoridade Certificadora Let’s Encrypt. Além disso, configuraremos a renovação automática dos certificados TLS do Let’s Encrypt usando um cron job antes que os certificados expirem.
TLS, também conhecido como Segurança da Camada de Transporte, é um protocolo de rede que usa certificados SSL para criptografar o tráfego de rede que flui entre um servidor e um cliente, ou entre um servidor web, como o servidor Nginx, e um navegador. Todos os dados trocados entre essas duas entidades são protegidos e a conexão não pode ser descriptografada mesmo se for interceptada usando uma técnica como um ataque man-in-the-middle ou sniffing de pacotes. O software do pacote certbot é a utilidade cliente oficial fornecida pela CA Let’s Encrypt que pode ser usada no processo de geração e download de certificados gratuitos do Let’s Encrypt no Debian.
Requisitos
- Instalar a pilha LEMP no Debian 9.
- Um nome de domínio registrado publicamente com registros DNS adequados (registros A ou registros CNAME para subdomínios).
- Acesso direto ao console do servidor ou acesso remoto SSH ao servidor.
- Uma conta de usuário com privilégios de root ou acesso direto à conta root.
Instalar a Utilidade Cliente Certbot
Para instalar a utilidade cliente cerbot do Let’s Encrypt no Debian 9 a partir dos repositórios oficiais do Debian, abra um terminal e emita o seguinte comando com privilégios de root, como ilustrado na captura de tela a seguir.
apt-get install certbot
A utilidade apt do Debian, que é a interface de linha de comando do Gerenciador de Pacotes principal do Debian, perguntará, após algumas verificações preliminares, se você concorda em continuar com a instalação do pacote certbot e todas as suas dependências necessárias. Para aceitar o processo de instalação do software, responda com sim (y) no prompt do console do servidor.
Obter Certificado Let’s Encrypt
Para gerar e baixar certificados Let’s Encrypt para um domínio, primeiro certifique-se de que o servidor web Nginx está em funcionamento e que pelo menos a porta 80 está acessível pela internet. Para verificar se o Nginx está em execução, execute os seguintes comandos com privilégios de root.
sudo systemctl status nginxSe o servidor não estiver em execução, inicie o daemon do Nginx com o comando abaixo.
sudo systemctl start nginxCaso você tenha um firewall comum instalado no Debian, como o firewall UFW, que bloqueia todas as conexões de entrada nas portas 80 e 443, emita os comandos abaixo para abrir as portas HTTP e HTTPS no sistema.
sudo ufw allow 80/tcpsudo ufw allow 443/tcpPara obter certificados para seu domínio, execute o comando cerbot no console com os seguintes parâmetros e flags, conforme explicado abaixo. Execute o comando com privilégios de root e forneça seu nome de domínio e todos os outros subdomínios para os quais deseja obter certificados usando a flag –d. Além disso, forneça a opção –standalone para que o certbot não interfira nos arquivos de configuração do Nginx. O servidor Nginx deve ser parado enquanto emite certificados usando esta opção.
A sintaxe do comando cerbot:
sudo certbot certonly --standalone –d seu_dominio.com –d www.seu_dominio.comQuando você executar o comando certbot pela primeira vez e obter o certificado, será solicitado que você adicione seu endereço de e-mail e concorde com os termos de serviço do Let’s Encrypt. Escreva ‘a‘ para concordar com os termos de serviço e ‘não‘ para não compartilhar seu endereço de e-mail com os parceiros do Let’s Encrypt. Finalmente, após obter o certificado para seu domínio, leia as notas de rodapé para localizar o caminho do sistema dos certificados e a data em que eles expirarão.
Maneira alternativa de obter um certificado SSL do Let’s Encrypt
Para obter um certificado Let’s Encrypt via o plugin “webroot“, use a sintaxe abaixo. Adicione o diretório raiz do Nginx, que por padrão está localizado no caminho do sistema /var/www/html/, ao emitir o comando certbot com as flags –webroot e –w. Além disso, certifique-se de que o Nginx tenha permissões de gravação total no diretório raiz da web para criar o diretório /.well-known.
A opção –webroot para cerbot também solicitará que você adicione seu endereço de e-mail para renovação de certificado e avisos de segurança. O cliente Certbot possui um código embutido que pode detectar um endereço de e-mail falso. Você deve fornecer um endereço de e-mail publicamente acessível para continuar obtendo um certificado.
certbot certonly --webroot –w /var/www/html/ -d seu_dominio.com –d www.seu_dominio.com*Salvando log de depuração em /var/log/letsencrypt/letsencrypt.log**Digite o endereço de e-mail (usado para renovações urgentes e avisos de segurança) (Digite 'c' para**cancelar):[email protected] #Um endereço de e-mail falso será detectado**Parece haver problemas com esse endereço**. Digite o endereço de e-mail (usado para**renovações urgentes e avisos de segurança) Se você realmente quiser pular isso, você pode**executar o cliente com --register-unsafely-without-email, mas certifique-se de que você então**faça backup da sua chave de conta de /etc/letsencrypt/accounts (Digite 'c' para cancelar):[email protected]** **-------------------------------------------------------------------------------**Por favor, leia os Termos de Serviço em**https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. Você deve concordar**para se registrar no servidor ACME em**https://acme-v01.api.letsencrypt.org/directory**-------------------------------------------------------------------------------**(A)cordar/(C)ancelar: a** **-------------------------------------------------------------------------------**Você estaria disposto a compartilhar seu endereço de e-mail com a Electronic Frontier**Foundation, um parceiro fundador do projeto Let's Encrypt e a organização sem fins lucrativos**que desenvolve o Certbot? Gostaríamos de enviar e-mails sobre a EFF e**nossa trabalho para criptografar a web, proteger seus usuários e defender direitos digitais.**-------------------------------------------------------------------------------**(S)im/(N)ão: n**Obtendo um novo certificado**Realizando os seguintes desafios:**desafio http-01 para www.dominio.com**Usando o caminho do webroot /var/www/html/ para todos os domínios não correspondidos.**Esperando verificação...**Limpando desafios** **NOTAS IMPORTANTES:** - Parabéns! Seu certificado e cadeia foram salvos em** /etc/letsencrypt/live/www.seu_dominio.com/fullchain.pem. Seu** cert expirará em 2017-12-28. Para obter uma nova versão ou ajustada** deste certificado no futuro, basta executar o certbot novamente. Para** renovar *todas* as suas certificações não interativamente, execute "certbot** renew"** - Suas credenciais de conta foram salvas na sua** diretório de configuração do Certbot em /etc/letsencrypt. Você deve** fazer um backup seguro desta pasta agora. Este diretório de configuração** também conterá certificados e chaves privadas obtidas** pelo Certbot, então fazer backups regulares desta pasta é ideal.** - Se você gosta do Certbot, considere apoiar nosso trabalho em:** ** Doando para ISRG / Let's Encrypt: https://letsencrypt.org/donate** Doando para EFF: **https://eff.org/donate-le*
Configurar Nginx para TLS (SSL)
Um arquivo de configuração TLS padrão completo do Nginx para um domínio deve se parecer com o trecho de arquivo abaixo.
/etc/nginx/sites-enabled/default-ssl exemplo de arquivo:
* server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name www.seu_dominio.com seu_dominio.com;
#server_name _;
root /var/www/html;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
#Certificados SSL
ssl_certificate "/etc/letsencrypt/live/www.seu_dominio.com/cert.pem";
ssl_certificate_key "/etc/letsencrypt/live/www.seu_dominio.com/privkey.pem";
ssl_dhparam /etc/nginx/dhparam.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=31536000;
#includeSubDomains" always;
location / {
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$args $uri/ =404;
}
set $cache_uri $request_uri;
location ~ /.well-known {
allow all;
}
#
# # Com php-fpm (ou outros sockets unix):
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
# # Com php-cgi (ou outros sockets tcp):
# fastcgi_pass 127.0.0.1:9000;
}
# negar acesso a arquivos .htaccess, se o diretório raiz do documento do Apache
# coincidir com o do nginx
#
#location ~ \/\.ht {
# deny all;
#}
** }*As linhas de código para processar scripts PHP via FastCGI Process Manager também podem ser encontradas neste trecho e são representadas pelas seguintes linhas.
*location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
}
*Instalar Certificados Let’s Encrypt no Nginx
Os certificados e chaves do Let’s Encrypt são armazenados no diretório /etc/letsencrypt/live/www.seu_dominio.com/ no Debian. O comando ls contra o diretório acima revelará todos os componentes do certificado, como o arquivo da cadeia, o arquivo fullchain, a chave privada e o arquivo do certificado.
ls /etc/letsencrypt/live/www.seu_dominio.com/Para instalar o certificado Let’s Encrypt no arquivo de configuração TLS do servidor web Nginx, abra o arquivo default-ssl do Nginx e atualize as linhas abaixo para refletir os caminhos dos arquivos de certificado do Let’s Encrypt para seu domínio, como mostrado no trecho abaixo.
nano /etc/nginx/sites-enabled/default-sslAltere as seguintes linhas como abaixo:
ssl_certificate "/etc/letsencrypt/live/www.seu_dominio.com/cert.pem ";
ssl_certificate_key "/etc/letsencrypt/live/www.seu_dominio.com/privkey.pem";**
Além disso, se a declaração ssl_dhparam estiver presente na configuração SSL do Nginx, você deve gerar uma nova chave Diffie–Hellman de 2048 bits emitindo o seguinte comando. A geração dos parâmetros da chave Diffie–Hellman deve levar um tempo dependendo da aleatoriedade ou entropia do seu sistema.
openssl dhparam –out /etc/nginx/dhparam.pem 2048Finalmente, antes de ativar a configuração TLS do Nginx reiniciando o daemon do Nginx para refletir as mudanças, primeiro verifique as configurações do Nginx para potenciais erros de sintaxe. Depois, se o teste do arquivo de configuração do Nginx for bem-sucedido, reinicie o daemon do Nginx para carregar a nova configuração juntamente com os certificados do Let’s Encrypt, emitindo os comandos abaixo.
nginx -tservice nginx restartPara verificar se o serviço nginx possui um socket aberto em estado de escuta na porta 443, execute o comando netstat conforme mostrado no trecho abaixo.
netstat –tulpn | grep -e 443 -e LISTENVocê também deve abrir um navegador e navegar até seu nome de domínio via protocolo HTTPS. Se os certificados do Let’s Encrypt forem aplicados com sucesso no Nginx, o handshake SSL deve funcionar sem erros.
Forçar tráfego web para HTTPS
Para forçar os visitantes do seu domínio a navegar em seu site apenas via protocolo HTTPS, abra o arquivo de configuração padrão do Nginx sites-enabled e adicione a seguinte linha, que força todos os pedidos que atingem a porta 80 a serem redirecionados com um código de status 301 (movido permanentemente) para a porta 443.
nano /etc/nginx/sites-enabled/defaultA declaração de redirecionamento deve se parecer com a apresentada no trecho abaixo.
*server_name www.seu_dominio.com seu_dominio.com;
**return 301 https://$server_name$request_uri;*
Subsequentemente, reinicie o daemon do Nginx para aplicar a mudança, emitindo o comando abaixo.
service nginx restartVerificações Finais
Para investigar ainda mais os certificados gerados pela CA Let’s Encrypt, você pode usar um navegador web moderno, como o Chrome. Visite seu domínio a partir do navegador Chrome e pressione a tecla de função F12 para abrir as Ferramentas de Desenvolvedor. Navegue até a aba Segurança e clique no botão Ver certificado para abrir o certificado, como mostrado nas capturas de tela a seguir.
Outra utilidade útil na investigação de certificados SSL é a utilidade de linha de comando openssl. Para mostrar informações extras sobre um certificado da CA Let’s Encrypt, execute o seguinte comando em um console Linux.
openssl s_client –connect www.seu_dominio.com:443
Renovar Automaticamente o Certificado Let’s Encrypt
Para renovar automaticamente um certificado emitido pela CA Let’s Encrypt antes da data de expiração, agende um trabalho crontab para ser executado uma vez por dia às 2:00 AM, emitindo o seguinte comando. A saída do cron job executado será direcionada para um arquivo de log, armazenado em /var/log/letsencrypt.log
crontab –eCron job para renovar o certificado.
**0 2 * * *** certbot renew >> /var/log/letsencrypt.logIsso é tudo! Para outras configurações mais avançadas sobre certificados e utilitários do Let’s Encrypt, visite a documentação oficial no seguinte endereço da internet https://certbot.eff.org/docs/.
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.