Skip to main content

Let’s Encrypt | Nginx

  • Let’s Encrypt | Nginx
warning

No caminho /etc/letsencrypt/live/your_domain.com/ contém alguns certificados. São eles:

  • cert.pem: The server certificate itself.
  • chain.pem: The intermediate certificate that chains back to a trusted root.
  • fullchain.pem: A combination of cert.pem and chain.pem, which is often required by web servers like Nginx.
  • privkey.pem: The crucial private key for your certificate.

No caminho /etc/letsencrypt/csr contém todas as últimas versões dos certificados

A chave pública está dentro do certificado .crt. Olhar documentação de Certificados

Introdução

Let’s Encrypt é uma Autoridade Certificadora (CA) que fornece uma maneira fácil de obter e instalar certificados TLS/SSL gratuitos, permitindo a criptografia HTTPS em servidores web. Ela simplifica o processo oferecendo um cliente de software, o Certbot, que tenta automatizar a maioria (se não todos) dos passos necessários. Atualmente, o processo completo de obtenção e instalação de um certificado é totalmente automatizado tanto para Apache quanto para Nginx.

Neste tutorial, você usará o Certbot para obter um certificado SSL gratuito para o Nginx no Ubuntu 20.04 e configurar seu certificado para renovar automaticamente.

Este tutorial usará um arquivo de configuração separado para o Nginx, em vez do arquivo padrão. Recomendamos criar novos arquivos de blocos de servidor do Nginx para cada domínio, pois isso ajuda a evitar erros comuns e mantém os arquivos padrão como uma configuração de fallback.

Deixe o DigitalOcean cuidar da administração do Nginx e do Let’s Encrypt. A Plataforma de Aplicativos do DigitalOcean permitirá que você faça o deploy diretamente do GitHub em minutos. A Plataforma de Aplicativos também cuidará dos certificados SSL e do roteamento para você.

Pré-requisitos

Para seguir este tutorial, você precisará de:

  • Um servidor Ubuntu 20.04 configurado seguindo este tutorial de configuração inicial do servidor para Ubuntu 20.04, incluindo um usuário não root com permissões sudo e um firewall.

  • Um nome de domínio registrado. Este tutorial usará example.com como exemplo. Você pode comprar um nome de domínio na Namecheap, obter um gratuitamente com o Freenom ou usar o registrador de sua escolha.

  • Os dois seguintes registros DNS configurados para seu servidor. Se estiver usando o DigitalOcean, consulte nossa documentação de DNS para obter detalhes sobre como adicioná-los.

    • Um registro A com example.com apontando para o endereço IP público do seu servidor.
    • Um registro A com www.example.com apontando para o endereço IP público do seu servidor.
  • O Nginx instalado seguindo o tutorial Como Instalar o Nginx no Ubuntu 20.04. Certifique-se de ter um bloco de servidor para seu domínio. Este tutorial usará /etc/nginx/sites-available/example.com como exemplo.

Passo 1 — Instalando o Certbot

O primeiro passo para usar o Let’s Encrypt e obter um certificado SSL é instalar o software Certbot no seu servidor.

Instale o Certbot e seu plugin para o Nginx com o comando apt:

sudo apt install certbot python3-certbot-nginx

O Certbot agora está pronto para ser usado, mas para configurá-lo automaticamente para o Nginx, precisamos verificar algumas configurações do Nginx.

Passo 2 — Confirmando a Configuração do Nginx

O Certbot precisa ser capaz de encontrar o bloco de server correto na sua configuração do Nginx para poder configurar automaticamente o SSL. Especificamente, ele faz isso procurando por uma diretiva server_name que corresponda ao domínio para o qual você solicita o certificado.

Se você seguiu o passo de configuração do bloco de servidor no tutorial de instalação do Nginx, você deverá ter um bloco de servidor para o seu domínio em /etc/nginx/sites-available/example.com com a diretiva server_name já configurada corretamente.

Para verificar, abra o arquivo de configuração do seu domínio com nano ou seu editor de texto favorito:

sudo nano /etc/nginx/sites-available/example.com

Encontre a linha server_name existente. Ela deve se parecer com isso:

/etc/nginx/sites-available/example.com

...
server_name example.com www.example.com;
...

Se for isso, saia do editor e passe para o próximo passo.

Se não for isso, atualize para corresponder. Em seguida, salve o arquivo, saia do editor e verifique a sintaxe das edições de configuração:

sudo nginx -t

Se você receber um erro, reabra o arquivo do bloco de servidor e verifique se há erros de digitação ou caracteres faltando. Uma vez que a sintaxe do seu arquivo de configuração esteja correta, recarregue o Nginx para carregar a nova configuração:

sudo systemctl reload nginx

Agora, o Certbot pode encontrar o bloco de server correto e atualizá-lo automaticamente.

Em seguida, vamos atualizar o firewall para permitir o tráfego HTTPS.

Passo 3 — Permitindo HTTPS no Firewall

Se você tiver o firewall ufw ativado, como recomendado pelos guias de pré-requisitos, será necessário ajustar as configurações para permitir o tráfego HTTPS. Felizmente, o Nginx registra alguns perfis com o ufw durante a instalação.

Você pode ver a configuração atual digitando:

sudo ufw status

Provavelmente, ela se parecerá com isso, o que significa que apenas o tráfego HTTP está permitido para o servidor web:

Output
Status: active

To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)

Para permitir também o tráfego HTTPS, permita o perfil Nginx Full e remova a permissão redundante para o Nginx HTTP:

sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'

Agora, seu status deve ser parecido com isso:

sudo ufw status
Output
Status: active

To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)

Agora, vamos rodar o Certbot e obter nossos certificados.

Passo 4 — Obtendo um Certificado SSL

O Certbot oferece uma variedade de maneiras de obter certificados SSL por meio de plugins. O plugin para Nginx cuidará da reconfiguração do Nginx e do recarregamento da configuração sempre que necessário. Para usar este plugin, digite o seguinte:

sudo certbot --nginx -d example.com -d www.example.com

Isso executa o certbot com o plugin --nginx, usando -d para especificar os nomes de domínio para os quais queremos que o certificado seja válido.

Se esta for a primeira vez que você usa o certbot, será solicitado que você insira um endereço de e-mail e aceite os termos de serviço. Após fazer isso, o certbot se comunicará com o servidor do Let’s Encrypt, e então rodará um desafio para verificar se você controla o domínio para o qual está solicitando o certificado.

Se tudo correr bem, o certbot perguntará como você deseja configurar suas configurações HTTPS.

Output
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):

Escolha a opção e pressione ENTER. A configuração será atualizada, e o Nginx será recarregado para aplicar as novas configurações. O certbot finalizará com uma mensagem dizendo que o processo foi bem-sucedido e onde seus certificados estão armazenados:

Output
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem
Your cert will expire on 2020-08-18. 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"
- 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

Seus certificados foram baixados, instalados e carregados. Tente recarregar seu site usando https:// e perceba o indicador de segurança no seu navegador. Ele deve indicar que o site está adequadamente seguro, geralmente com um ícone de cadeado. Se testar seu servidor usando o SSL Labs Server Test, ele receberá um grade A.

Agora, vamos finalizar testando o processo de renovação.

Passo 5 — Verificando a Renovação Automática do Certbot

Os certificados do Let’s Encrypt são válidos apenas por noventa dias. Isso é feito para incentivar os usuários a automatizar o processo de renovação de seus certificados. O pacote certbot que instalamos cuida disso para nós, adicionando um timer do systemd que será executado duas vezes ao dia e renovará automaticamente qualquer certificado que esteja dentro de trinta dias da expiração.

Você pode consultar o status do timer com systemctl:

sudo systemctl status certbot.timer
Output
● certbot.timer - Run certbot twice daily
Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Mon 2020-05-04 20:04:36 UTC; 2 weeks 1 days ago
Trigger: Thu 2020-05-21 05:22:32 UTC; 9h left
Triggers: ● certbot.service

Para testar o processo de renovação, você pode realizar um teste com o certbot:

sudo certbot renew --dry-run

Se não houver erros, você está pronto. Quando necessário, o Certbot renovará seus certificados e recarregará o Nginx para aplicar as mudanças. Se o processo de renovação automática falhar, o Let’s Encrypt enviará uma mensagem para o e-mail que você especificou, avisando quando seu certificado estiver prestes a expirar.

Conclusão

Neste tutorial, você instalou o cliente Let’s Encrypt certbot, baixou certificados SSL para seu domínio, configurou o Nginx para usar esses certificados e configurou a renovação automática do certificado. Se você tiver mais dúvidas sobre como usar o Certbot, a documentação oficial é um bom lugar para começar.