Como instalar o certbot (Let’s Encrypt) no Amazon Linux 2 com Nginx

folder_openLinux, Segurança da Informação
access_time

4 min

  • Atualizado em Set/2022 para refletir as novas versões do certbot

Nesse tutorial vamos passar instruções de como configurar o Nginx com certificados SSL emitidos pelo Let’s Encrypt, uma solução para emissão de certificados SSL gratuitos.

O Amazon Linux é uma distribuição de Linux baseada no RedHat Enterprise Linux, é a versão que vem como padrão quando se inicia uma instância de LightSail e é a recomendada padrão ao criar uma instância EC2.

Embora disponíveis também versões do CentOS, RedHat, Ubuntu, o Amazon Linux oferece a vantagem de vir com os pacotes de administração da AWS, conta com Kernel LTS (Long Term Support), e a Amazon garante atualização dos pacotes por um tempo estendido.

O Nginx é um servidor Web conhecido por sua alta performance, facilidade de configuração e flexibilidade, podendo atender milhares de conexões simultâneas com baixo uso de memória e CPU.

Vamos aos passos:

1. Instalar o Nginx

A Amazon disponibiliza seu próprio comando para instalar o Nginx, basta utilizar:

sudo amazon-linux-extras install nginx1.12

Iniciar o serviço e colocar no boot:

sudo systemctl start nginx
sudo systemctl enable nginx

Isso vai iniciar o serviço, o diretório padrão para arquivos HTML é o /usr/share/nginx/html, o arquivo de configuração aceitará todos os domínios, você pode configurar os domínios individualmente.

2. Instalar o Certbot e suas dependências

Certbot é o utilitário utilizado para gerar os certificados do Let’s Encrypt.

As instruções para instalar o Certbot em um Linux genérico estão disponíveis na página oficial, vamos usar os mesmos comandos com alguns ajustes para o Amazon Linux 2.

sudo python3 -m venv /opt/certbot/
sudo /opt/certbot/bin/pip install --upgrade pip
sudo /opt/certbot/bin/pip install certbot certbot-nginx
sudo ln -s /opt/certbot/bin/certbot /usr/bin/certbot

Agora se seguirmos o processo e tentarmos rodar:

sudo certbot --nginx

Esse comando irá instalar todas as dependências e bibliotecas necessárias para gerar o certificado SSL, as perguntas que ele fará:

Primeiro ele trará uma lista de pacotes que precisam ser instalados, confirme com “y”

Install 8 Packages (+29 Dependent packages)
Total download size: 47 M
Installed size: 126 M
Is this ok [y/d/N]:

Depois ele solicitará um e-mail para o registro, entre com um e-mail válido, pois se houver algum problema com seu certificado, você será notificado antes de ter problemas;

Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):

Ele perguntará se aceita os termos e condições, aceite com “A”:

(A)gree/(C)ancel:

Ele perguntará se deseja compartilhar o e-mail com a Electronic Frontier Foundation, é interessante a EFF saber quantas pessoas usam certificados SSL para continuar incentivando doações:

(Y)es/(N)o

Agora já está na hora de gerar o certificado.

3. Gerando o certificado

Na verdade, o comando anterior irá gerar o certificado automaticamente, de duas formas:

  • Se você já configurou alguns domínios no seu Nginx, ele irá detectar automaticamente e sugerir a geração dos certificados
  • Se você está com a configuração padrão do Nginx, ele trará uma mensagem indicando para entrar com os domínios a gerar o certificado:
No names were found in your configuration files. Please enter in your domain name(s) (comma and/or space separated)(Enter 'c' to cancel):

Nesse momento você pode digitar os domínios a serem gerados, se tiver mais de um separe por espaços. Caso ainda não tenha configurado o DNS, use a letra “c” para pular essa etapa e gerar o certificado depois.

Se precisar gerar o certificado depois, pode utilizar o comando*:

sudo certbot --nginx certonly -d DOMINIO.COM.BR

* aqui partimos do princípio que o domínio já está apontando para o IP do servidor e que o Firewall está configurado as portas 80 e 443 abertas

4. Testando seu certificado SSL:

Essa é a parte mais simples, basta abrir em seu navegador a URL colocando o protocolo HTTPS, por exemplo: https://dominio.com.br

5. Configurar a renovação automática do certificado SSL

Por segurança, os certificados expiram a cada 3 meses e precisam ser renovados (gerado um novo). Mas o processo é bem simples, basta colocar no Crontab, de acordo com o comando oficial:

echo "0 0,12 * * * root python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew -q" | sudo tee -a /etc/crontab > /dev/null

Eles usam uma chamada do python com um sleep de até 1 hora para que não aconteça de todos os clientes bombardearem ao mesmo tempo os servidores deles para renovar o certificado.

6. Extra: testando sua configuração de segurança do SSL

Recomendado pela equipe do Let’s Encrypt, existe uma ferramenta que testa a configuração do SSL, se está configurado com as melhores práticas e melhores protocolos.

O SSL é um protocolo que já tem uma certa idade, foi inventado pela Netscape em 1995 (25 anos quando escrevo esse artigo).

Ele iniciou com um protocolo na época, que era o SSLv1, usando algorítimos de criptografia da época (DES e MD5).

Posteriormente foram sendo encontradas vulnerabilidades no protocolo e nos algorítimos, por isso foram sendo geradas versões novas do protocolo (SSLv2, SSLv3, TLS 1.0, TLS 1.1, TLS 1.2, TLS 1.3) e substituídos os algorítimos (RSA, AES, SHA256 e SHA384 atualmente).

Em 2020, o padrão de segurança é o TLS v1.2, ele é compatível com Android 4.4.2 ou superior, Chrome 49 ou superior, Internet Explorer 11, Edge 15 ou superior, Safari 9 ou superior. Veja que é incompatível com algumas versões antigas, mas isso em troca da segurança.

Você pode testar sua configuração no site abaixo, entre com o domínio para um diagnóstico:

https://www.ssllabs.com/ssltest/

O resultado será uma nota, sendo A a mais alta segurança.

Uma instalação nova do Nginx deve conseguir a nota mais alta facilmente.

Se houverem problemas, o próprio site recomendará alterações.

Related Posts

Menu