Tutorial

Como Proteger o Nginx com o Let's Encrypt no Ubuntu 18.04

Published on May 17, 2018
Português
Como Proteger o Nginx com o Let's Encrypt no Ubuntu 18.04

Uma versão anterior desse tutorial foi escrita por Hazel Virdó

Introdução

O Let’s Encrypt é uma Autoridade de Certificação (CA) que fornece uma maneira fácil de obter e instalar certificados gratuitos TLS/SSL, permitindo assim, HTTPS criptografado em servidores web. Ele simplifica o processo através do fornecimento de software cliente, que tenta automatizar a maioria (se não todos) dos passos requeridos. Atualmente, o processo inteiro de obtenção e instalação de um certificado é totalmente automatizado, tanto no Apache quanto no Nginx.

Neste tutorial, vamos utilizar o Certbot para obter um certificado SSL gratuito para o Nginx no Ubuntu 18.04 e configurar o seu certificado para renovar automaticamente.

Este tutorial utilizará um arquivo de bloco do servidor Nginx separado em vez do arquivo padrão. Recomendamos a criação de novos arquivos de bloco do servidor Nginx para cada domínio porque isso ajuda a evitar erros comuns e a manter os arquivos padrão como uma configuração de reserva.

Pré-requisitos

Para seguir este tutorial, você vai precisar de:

  • Um servidor Ubuntu 18.04 configurado seguindo esse tutorial de configuração inicial de servidor com Ubuntu 18.04, incluindo um usuário que não seja root e um firewall.

  • Um nome de domínio totalmente registrado. Vamos utilizar example.com durante todo o tutorial. Você pode comprar um nome de domínio no Namecheap, obter um gratuito no Freenom, ou utilizar um registrador de domínios à sua escolha.

  • Ambos os registros de DNS a seguir configurados para o seu servidor. Você pode seguir essa introdução ao DNS da DigitalOcean para detalhes de 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.
  • Nginx instalado seguindo Como Instalar o Nginx no Ubuntu 18.04. Certifique-se de que você tem um bloco de servidor para o seu domínio. Este tutorial irá utilizar /etc/nginx/sites-available/example.com como um exemplo.

Passo 1 — Instalando o Certbot

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

O Certbot está em pleno desenvolvimento, dessa forma, os pacotes fornecidos pelo Ubuntu tendem a estar desatualizados. Contudo, os desenvolvedores do Certbot mantém um repositório de software Ubuntu com versões atualizadas, então vamos usar esse repositório.

Primeiro, adicione o repositório:

  1. sudo add-apt-repository ppa:certbot/certbot

Você vai precisar pressionar ENTER para aceitar. Depois, atualize a lista de pacotes para pegar as novas informações de pacotes do repositório:

  1. sudo apt update

E, finalmente, instale o pacote Nginx do Certbot com o apt:

  1. sudo apt install python-certbot-nginx

O Certbot está pronto para uso agora, mas para que ele configure o SSL 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 server correto em sua configuração Nginx para que ele possa configurar automaticamente o SSL. Especificamente, ele faz isso buscando por uma diretiva server_name que corresponda ao domínio para o qual você requisitou o certificado.

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

Para verificar, abra o arquivo de bloco do servidor para o seu domínio usando o nano ou o seu editor de textos favorito:

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

Encontre a linha server_name existente. Ela deve ser algo assim:

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

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

Se ela existir, saia do seu editor e vá para o próximo passo.

Caso contrário, atualize a linha para corresponder. Depois salve o arquivo, saia do seu editor, e verifique a sintaxe da edição da sua configuração:

  1. sudo nginx -t

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

  1. sudo systemctl reload nginx

O Certbot agora pode encontrar o bloco server correto e atualizá-lo.

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

Passo 3 — Permitindo HTTPS Através do Firewall

Se você tem um firewall ufw ativado, como recomendado nos guias de pré-requisitos, você vai precisar ajustar as configurações para permitir o tráfego HTTPS. Felizmente, o Nginx registra alguns perfis com o ufw na instalação.

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

  1. sudo ufw status

Isso provavelmente será assim, significando que somente o tráfego HTTPS 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 adicionalmente o tráfego HTTPS, permita o perfil Nginx Full e exclua a permissão redundante do perfil Nginx HTTP:

  1. sudo ufw allow 'Nginx Full'
  2. sudo ufw delete allow 'Nginx HTTP'

Seu status deverá se parecer com isso:

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

Em seguida, vamos executar o Certbot e buscar nossos certificados.

Passo 4 — Obtendo um Certificado SSL

O Certbot fornece uma variedade de maneiras de se obter certificados SSL através de plugins. O plugin Nginx cuida da reconfiguração do Nginx e do recarregamento da configuração sempre que necessário. Para utilizar esse plugin, digite o seguinte:

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

Isto executa o certbot com o plugin --nginx, usando -d para especificar os nomes para os quais queremos que os certificados sejam válidos.

Se esta é a primeira vez que você executa o certbot, você será solicitado a entrar com um endereço de e-mail e concordar com os termos do serviço. Depois de fazer isto, certbot vai se comunicar com o servidor do Let’s Encrypt, então executa um desafio para verificar que você controla o domínio para o qual você está solicitando um certificado.

Se isso for bem sucedido, o certbot perguntará como você gostaria de definir suas configurações de 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):

Selecione a sua escolha e pressione ENTER. A configuração será atualizada, e o Nginx irá recarregar para pegar as novas configurações. O certbot irá terminar com uma mensagem informando que o processo foi bem-sucedido e onde os 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 2018-07-23. 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

Seus certificados estão baixados, instalados, e carregados. Tente recarregar seu site web utilizando https:// e observe o indicador de segurança do seu navegador. Ele deve indicar que o site está adequadamente seguro, normalmente com um ícone de um cadeado verde. Se você testar seu servidor usando o teste de servidor do SSL Labs, ele lhe dará uma nota A.

Vamos terminar testando o processo de renovação.

Passo 5 — Verificando a Auto-Renovação do Certbot

Os certificados Let’s Encrypt são válidos por apenas noventa dias. Isto é para encorajar os usuários a automatizar seus processos de renovação de certificado. O pacote certbot que instalamos cuida disto para nós ao adicionar um script ao /etc/cron.d. Este script executa duas vezes ao dia e irá renovar automaticamente qualquer certificado dentro de trinta dias da expiração.

Para testar o processo de renovação, você pode fazer um “dry” com certbot:

  1. sudo certbot renew --dry-run

Se você não visualizar nenhum erro, está tudo pronto. Quando necessário, o Certbot irá renovar seus certificados e recarregar o Nginx para pegar as alterações. Se o processo de renovação automatizado falhar, Let’s Encrypt enviará uma mensagem ao e-mail que você especificou, lhe avisando quando seu certificado estiver prestes a expirar.

Conclusão

Neste tutorial, você instalou o cliente Let’s Encrypt certbot, baixou certificados SSL para o seu domínio, configurou o Nginx para utilizar estes certificados, e configurou a renovação automática do certificado. Se você tiver outras dúvidas sobre o uso do Certbot, sua documentação é um bom lugar para iniciar.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about our products

About the authors

Default avatar

staff technical writer

hi! i write do.co/docs now, but i used to be the senior tech editor publishing tutorials here in the community.



Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
5 Comments


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Boa tarde, eu gostaria de saber se tem esse mesmo tutorial porem para o Debian 8.10 x64? Estou precisando ativar o https:// no meu domínio. Ficaria agradecido caso pudessem compartilhar o link dessa configuração. Obrigado.

Pessoal, decidi compartilhar com vocês que usam EasyEngine para criar os sites Wordpress…

Eu tenho alguns clientes comigo e fiquei com medo de corromper algum arquivo, sei lá… Mas li o artigo abaixo e pronto!

é apenas uma linha de comando e vc coloca o certificado SSL

https://easyengine.io/docs/lets-encrypt

This comment has been deleted

    olá seguir todo o passo a passo mas não obtive sucesso. quando fui verificar a página com o https:// a tela ficou assim: **** Bem vindo ao nginx! Se você vir esta página, o servidor da Web nginx será instalado e funcionará com êxito. Mais configurações são necessárias.

    Para documentação e suporte online, por favor, consulte o nginx.org . Suporte comercial está disponível em nginx.com .

    Obrigado por usar o nginx.****

    e o wordpress também não esta funcionando, o que aconteceu? que configurações são necessárias? já que fiz a verificação do certbot e a avaliação do site foi “A”?

    Is there a way to apply this tutorial in an IP address? I have a droplet just to study and I don’t want a domain.

    Try DigitalOcean for free

    Click below to sign up and get $200 of credit to try our products over 60 days!

    Sign up

    Join the Tech Talk
    Success! Thank you! Please check your email for further details.

    Please complete your information!

    Become a contributor for community

    Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

    DigitalOcean Documentation

    Full documentation for every DigitalOcean product.

    Resources for startups and SMBs

    The Wave has everything you need to know about building a business, from raising funding to marketing your product.

    Get our newsletter

    Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.

    New accounts only. By submitting your email you agree to our Privacy Policy

    The developer cloud

    Scale up as you grow — whether you're running one virtual machine or ten thousand.

    Get started for free

    Sign up and get $200 in credit for your first 60 days with DigitalOcean.*

    *This promotional offer applies to new accounts only.