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

Instalar Certbot no Debian 9

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 nginx

Se o servidor não estiver em execução, inicie o daemon do Nginx com o comando abaixo.

sudo systemctl start nginx

Caso 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/tcp
sudo ufw allow 443/tcp

Para 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.com

Quando 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*

Obter um Certificado SSL com Certbot


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-ssl

Altere 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";

**Definir caminhos do certificado Lets Encrypt

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 2048

Finalmente, 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 -t
service nginx restart

Para 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 LISTEN

Você 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.

https://www.seu_dominio.com

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/default

A 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;*

Forçar HTTPS

Subsequentemente, reinicie o daemon do Nginx para aplicar a mudança, emitindo o comando abaixo.

service nginx restart

Verificaçõ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.

Verificar certificado SSL

Detalhes do certificado SSL mostrados no navegador Chrome

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

Verificar certificado SSL com o comando OpenSSL

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 –e

Cron job para renovar o certificado.

**0 2 * * *** certbot renew >> /var/log/letsencrypt.log

Isso é 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/.

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.