Como instalar Certificado SSL (Let’s Encrypt) no Amazon Linux 2 com Nginx

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: (partimos do princípio que você já tem a máquina virtual instanciada e uma sessão SSH nela)

1. Como 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 se preferir.

2. Como 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.

wget https://dl.eff.org/certbot-auto
sudo mv certbot-auto /usr/local/bin/certbot-auto
sudo chown root /usr/local/bin/certbot-auto
sudo chmod 0755 /usr/local/bin/certbot-auto

Agora se seguirmos o processo e tentarmos rodar:

sudo /usr/local/bin/certbot-auto --nginx

Obtemos o erro:

Sorry, I don't know how to bootstrap Certbot on your operating system!

Como escrevemos no início do artigo, o Amazon Linux 2 é baseado no RedHat Linux, então basta simular um RedHat Linux para funcionar*:

sudo touch /etc/redhat-release

* importante apagar esse arquivo no final, pois ele pode influenciar o funcionamento de outros softwares, veja no final desse artigo em “Limpando nossa sujeira”

E depois tentar novamente o comando:

sudo /usr/local/bin/certbot-auto --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:

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 /usr/local/bin/certbot-auto --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)' && /usr/local/bin/certbot-auto 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. Limpando nossa sujeira

No meio do processo geramos um arquivo para simular um ambiente RedHat Linux, vamos apagar esse arquivo para que nenhum outro software confunda a distribuição do Linux e acabe gerando resultados inesperados:

sudo rm /etc/redhat-release -fv

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

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.

Artigo publicado originalmente no site do Sky Monitor

Fernando Ulisses dos Santos

Mais artigos deste autor »

Empreendedor em Empresas de Tecnologia da Informação.

Pós-Graduado em Segurança da Informação, certificado VMware VCAP-DTD.

Atualmente trabalha no seu mais novo projeto, o Sky Monitor.

Idealizou e criou o PowerBiz, ferramenta para Convertion Rate Optimization em Marketing Digital.

Criou o Business Monitor, um mini sistema de BI para geração de Dashboards em tempo real.

Fundador da Blue Solutions, onde trabalhou em dezenas de projetos de virtualização, reestruturação, implantação e migração de Datacenter em empresas de todos os portes.


1 Comentários

Deixe seu comentário

Seu endereço de e-mail não será publicado. Campos com * são obrigatórios!