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