Instalando Let's Encrypt no Ubuntu e Debian com Nginx

Posted on: September 22, 2020 09:52 AM

Posted by: Renato

Views: 46

Instalando Let's Encrypt no Ubuntu e Debian com Nginx

Por Aristides Neto - 21/09/2020

LINUX NGINX LETSENCRYPT

Reposte por min do nosso colega Aristides

Nesse artigo vamos ver como é fácil criar certificados SSL para o seu site usando o Let's Encrypt e como servidor web usaremos o Nginx.

Let's Encrypt é uma Autoridade de Certificação (CA), que fornece certificados gratuitamente e gerencia seus certificados de uma forma automatizada, facilita todo o processo de criação, validação, instalação e renovação de certificados.

Para instalar e utilizar o Let's Encrypt é necessário que tenha acesso ao shell do seu servidor com um usuário root ou que tenha privilégios de sudo, para que possamos executar os comandos de instalação dos pacotes e para a geração dos certificados.

Disclaimer

Para esse tutorial, utilizei a distribuição Ubuntu 18.04, mas se você estiver usando o Ubuntu 20.04Debian 9 ou Debian 10, continue, pois irá funcionar sem problemas.

Para serviço de VPS, estou usando um droplet na Digital Ocean.

A Digital Ocean oferece um serviço de hospedagem de VPS excelente, estável e com vários recursos disponíveis em seu painel. Caso queira conhecer mais, utilize meu link de referência para se cadastrar e ganhe créditos assim que começar a utilizar seus serviços. Você ganha e eu também ;)

Instalando o Let's Encrypt

O Let's Encrypt recomenda o uso do cliente Certbot ACME para a maioria das pessoas, pois possuem modos avançados de configurações, e para nós que gostamos de fazer as coisas sem esforço, é uma boa!

Primeiro vamos instalar o pacote Certbot com o plugin do Nginx, digite o comando abaixo:

sudo apt install python-certbot-nginx

Esse comando irá instalar o pacote do Certbot e o plugin para Nginx, caso você ainda não tenha o Nginx instalado, será instalado junto.

Após a instalação do certbot e do plugin, vamos gerar o nosso certificado.

Para que seja possível gerar o certificado SSL seu site deve estar acessível na web, com o DNS já configurado. Caso queira configurar um servidor Nginx veja esse arquivo Aprenda a instalação e a configuração básica de como criar um server block com o servidor web Nginx

Se você usa um firewall em seu servidor, certifique-se que a porta 443 esteja liberada. Para quem usa o utilitário UFW, pode verificar com os comandos:

# Para verificar se a porta está liberada
sudo ufw status

# Para liberar a porta caso não esteja
sudo ufw allow 443

Gerando certificado SSL

Para o nosso exemplo, criei o subdomínio meublog.aristides.dev.

Para gerar o certificado, utiliza-se o utilitário certbot com o plugin do nginx, em seguida o parâmetro -d seguido do seu domínio.

sudo certbot --nginx -d meublog.aristides.dev

Caso queira criar certificados para mais de um domínio ao mesmo tempo, basta informar os mesmos com o parâmetro -d.

sudo certbot --nginx -d meusite.com.br -d meusite2.com.br

Ao executar o comando acima, algumas perguntas serão feitas e devem ser respondidas, a primeira é sobre os Termos de Serviço. Informe A para concordar e continuar.

A segunda é se gostaria de compartihar seu e-mail e receber notícias, campanhas entre outras informações sobre Let's Encrypt.

A terceira pergunta é se deseja que todo o tráfego para seu site seja redirecionado para HTTPS, digite 2 para Sim.

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2 
Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/default

Pronto. Certificado gerado com sucesso. Congratulations!

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://meublog.aristides.dev

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=meublog.aristides.dev
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/meublog.aristides.dev/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/meublog.aristides.dev/privkey.pem
   Your cert will expire on 2020-12-20. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Muito bom! Seu certificado foi gerado com sucesso e nesse momento seu site já deve estar funcionando com HTTPS.

Validando a configuração do SSL

Veja que após a conclusão do processo, ele informe que é possível testar a "força" que sua configuração possui. Para isso é necessário acessar o site https://www.ssllabs.com/ssltest e digitar o endereço do seu site.

Nota: Se você testar seu site agora, é muito provável que receba a letra B, que se refere à algumas variavéis de segurança que é testado. Na instalação que usamos aqui, não geramos uma chave RSA e nem a chave DHPARAM, a geração dessas chaves são um passo a mais para aumentar a segurança.

Utilizamos aqui o plugin do Nginx para a instalação, por isso que automaticamente nosso arquivo de configuração foi atualizado com as informações dos certificados e redirecionamento para HTTPS.

Para ter um certificado mais seguro, geralmente utilizamos o certbot certonly, para apenas gerar os certificados e manualmente as configurações e a geração de chaves RSA e DHPARAM deve ser feitas pelo administrador.

Estarei escrevendo um outro post a respeito dessa configuração!

Renovação automática

O certificado gerado tem validade por 90 dias. Para que o certificado seja renovado e você não tenha problemas com seu site, o Let's Encrypt cria uma entrada no cron do Linux para que automaticamente seja renovado o certificado quando necessário.

Veja o arquivo criado em /etc/cron.d/certbot, o mesmo é executado a cada 12 horas.

# /etc/cron.d/certbot: crontab entries for the certbot package
#
# Upstream recommends attempting renewal twice a day
#
# Eventually, this will be an opportunity to validate certificates
# haven't been revoked, etc.  Renewal will only occur if expiration
# is within 30 days.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew

Caso queira simular manualmente a renovação dos certificados, execute o comando certbot renew com o parâmetro --dry-run.

# Para simular
sudo certbot renew --dry-run

# Para renovar
sudo certbot renew 

Se você executar o comando para renovar e se ainda não for necessário, será retornada uma mensagem que não existe certificado para renovação.

Listar informações sobre certificados

Para saber maiores informações sobre todos os certificados que foram gerados pelo certbot, execute o comando certbot certificates:

sudo certbot certificates

Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Found the following certs:
  Certificate Name: meublog.aristides.dev
    Domains: meublog.aristides.dev
    Expiry Date: 2020-12-20 00:12:05+00:00 (VALID: 89 days)
    Certificate Path: /etc/letsencrypt/live/meublog.aristides.dev/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/meublog.aristides.dev/privkey.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Remover um certificado

Caso você não precise mais de um certificado criado para um domínio, seja por qual motivo for, a maneira mais simples e eficiente de fazer isso é utilizar os comandos que o certbot nos fornece.

# Remover através de uma lista fornecida pelo Certbot
sudo certbot delete

# Remover pelo domínio
# Esse comando não solicita confirmação, ao executar o certificado será removido
sudo certbot delete --cert-name meublog.aristides.dev

Diretório dos certificados gerados

Veja que no diretório /etc/letsencrypt é onde todos os arquivos referente aos certificados são salvos. Dentro dele existe um diretório chamado live.

[email protected]:/etc/letsencrypt# ls -l
total 40
drwx------ 3 root root 4096 Sep 21 01:11 accounts
drwx------ 3 root root 4096 Sep 21 01:12 archive
-rw-r--r-- 1 root root  121 Oct 10  2019 cli.ini
drwxr-xr-x 2 root root 4096 Sep 21 01:11 csr
drwx------ 2 root root 4096 Sep 21 01:11 keys
drwx------ 3 root root 4096 Sep 21 01:12 live
-rw-r--r-- 1 root root 1143 Sep 21 01:11 options-ssl-nginx.conf
drwxr-xr-x 2 root root 4096 Sep 21 01:12 renewal
drwxr-xr-x 5 root root 4096 Sep 21 01:11 renewal-hooks
-rw-r--r-- 1 root root  424 Sep 21 01:11 ssl-dhparams.pem

Dentro do diretório live estão salvos os arquivos referente ao seu site, veja que existe um diretório com o nome do meu domínio e dentro existe 4 arquivos com a extensão .pem que são as chaves e certificados gerados, e que são necessários para a validação do SSL.

[email protected]:/etc/letsencrypt/live# ls -l
total 4
drwxr-xr-x 2 root root 4096 Sep 21 01:12 meublog.aristides.dev

[email protected]:/etc/letsencrypt/live# ls -l meublog.aristides.dev/
total 4
-rw-r--r-- 1 root root 682 Sep 21 01:12 README
lrwxrwxrwx 1 root root  45 Sep 21 01:12 cert.pem -> ../../archive/meublog.aristides.dev/cert1.pem
lrwxrwxrwx 1 root root  46 Sep 21 01:12 chain.pem -> ../../archive/meublog.aristides.dev/chain1.pem
lrwxrwxrwx 1 root root  50 Sep 21 01:12 fullchain.pem -> ../../archive/meublog.aristides.dev/fullchain1.pem
lrwxrwxrwx 1 root root  48 Sep 21 01:12 privkey.pem -> ../../archive/meublog.aristides.dev/privkey1.pem

Os arquivos fullchain.pem e privkey.pem são usados dentro do arquivo de configuração do Nginx do seu site em /etc/nginx/sites-available.

Veja como ficou o arquivo /etc/nginx/sites-available/default.conf do Nginx após o certificado ser gerado:

# Arquivo: /etc/nginx/sites-available/default.conf
# partes das linhas foram ocultadas 

listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/meublog.aristides.dev/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/meublog.aristides.dev/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

server {
    if ($host = meublog.aristides.dev) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen 80 default_server;
    listen [::]:80 default_server;

    server_name meublog.aristides.dev;
    return 404; # managed by Certbot
}

Bom pessoal é isso aí. O Let's Encrypt nos ajuda a criar e gerenciar certificados automaticamente, sem esforço nenhum, do jeito que gostamos :)

Se ficou com alguma dúvida fique a vontade para perguntar.

Até a próxima!

Fontes:

Share
About Author

Renato

Developer

Add a Comment
Comments 1 Comments
  • Renato de Oliveira Lucena
    Renato de Oliveira Lucena - 3 weeks ago
    Mais sobre o assunto com apache no link abaixo. https://blog.renatolucena.net/post/let-s-encrypt-ssl-on-debian-8-with-apache-web-server