BLOG | NGINX

Atualizar: Usando certificados SSL/TLS gratuitos Let’s Encrypt com NGINX

Amir Rawdat Miniatura
Amir Rawdat
Publicado em 28 de janeiro de 2021

Editor – A postagem do blog detalhando o procedimento original para usar o Let’s Encrypt com NGINX (de fevereiro de 2016) redireciona para cá. As instruções nessa postagem estão obsoletas.

Esta postagem foi atualizada para eliminar a dependência do certbot‑auto , que a Electronic Frontier Federation (EFF) tornou obsoleto no Certbot 1.10.0 para Debian e Ubuntu e no Certbot 1.11.0 para todos os outros sistemas operacionais. Para obter detalhes adicionais e métodos alternativos de instalação, consulte esta postagem da EFF .

Veja também nossa postagem no blog do nginx.conf 2015, na qual Peter Eckersley e Yan Zhu da Electronic Frontier Foundation apresentam a então nova autoridade de certificação Let's Encrypt .

É bem sabido que a criptografia SSL/TLS do seu site leva a classificações de pesquisa mais altas e melhor segurança para seus usuários. No entanto, há uma série de barreiras que impedem os proprietários de sites de adotar o SSL.

Duas das maiores barreiras são o custo e os processos manuais envolvidos na obtenção de um certificado. Mas agora, com o Let's Encrypt , elas não são mais uma preocupação. O Let's Encrypt disponibiliza gratuitamente a criptografia SSL/TLS para todos.

Let’s Encrypt é uma autoridade de certificação (CA) gratuita, automatizada e aberta. Sim, está certo: Certificados SSL/TLS gratuitos. Os certificados emitidos pela Let’s Encrypt são confiáveis pela maioria dos navegadores hoje, incluindo navegadores mais antigos, como o Internet Explorer no Windows XP SP3. Além disso, o Let’s Encrypt automatiza totalmente a emissão e a renovação de certificados.

Nesta postagem do blog, abordamos como usar o cliente Let’s Encrypt para gerar certificados e como configurar automaticamente o NGINX Open Source e o NGINX Plus para usá-los.

Como o Let’s Encrypt funciona

Antes de emitir um certificado, o Let’s Encrypt valida a propriedade do seu domínio. O cliente Let’s Encrypt, em execução no seu host, cria um arquivo temporário (um token) com as informações necessárias. O servidor de validação Let’s Encrypt então faz uma solicitação HTTP para recuperar o arquivo e valida o token, o que verifica se o registro DNS do seu domínio é resolvido para o servidor que executa o cliente Let’s Encrypt.

Pré-requisitos

Antes de começar com o Let’s Encrypt, você precisa:

  • Tenha o NGINX ou NGINX Plus instalado.
  • Possuir ou controlar o nome de domínio registrado para o certificado. Se você não tiver um nome de domínio registrado, poderá usar um registrador de nomes de domínio, como GoDaddy ou dnsexit .
  • Crie um registro DNS que associe seu nome de domínio e o endereço IP público do seu servidor.

Agora você pode configurar facilmente o Let's Encrypt com o NGINX Open Source ou o NGINX Plus (para facilitar a leitura, de agora em diante nos referiremos simplesmente ao NGINX ).

Observação : Testamos o procedimento descrito nesta postagem do blog no Ubuntu 16.04 (Xenial).

1. Baixe o Let’s Encrypt Client

Primeiro, baixe o cliente Let's Encrypt, certbot .

Conforme mencionado acima, testamos as instruções no Ubuntu 16.04, e estes são os comandos apropriados para essa plataforma:

$ apt-get update$ sudo apt-get install certbot
$ apt-get install python-certbot-nginx

Com o Ubuntu 18.04 e posterior, substitua a versão Python 3:

$ apt-get update$ sudo apt-get install certbot
$ apt-get install python3-certbot-nginx

2. Configurar NGINX

O certbot pode configurar automaticamente o NGINX para SSL/TLS. Ele procura e modifica o bloco do servidor na sua configuração NGINX que contém uma diretiva server_name com o nome de domínio para o qual você está solicitando um certificado. No nosso exemplo, o domínio é www.example.com .

  1. Supondo que você esteja começando com uma nova instalação do NGINX, use um editor de texto para criar um arquivo no diretório /etc/nginx/conf.d chamado domain‑name .conf (portanto, em nosso exemplo, www.example.com.conf ).

  2. Especifique seu nome de domínio (e variantes, se houver) com a diretiva server_name :

    server {    listen 80 default_server;
        listen [::]:80 default_server;
        root /var/www/html;
        server_name example.com www.example.com;
    }
  3. Salve o arquivo, execute este comando para verificar a sintaxe da sua configuração e reinicie o NGINX:

    $ nginx -t && nginx -s reload

3. Obtenha o certificado SSL/TLS

O plug-in NGINX para certbot cuida da reconfiguração do NGINX e do recarregamento de sua configuração sempre que necessário.

  1. Execute o seguinte comando para gerar certificados com o plug-in NGINX:

    $ sudo certbot --nginx -d example.com -d www.example.com
  2. Responda às solicitações do certbot para configurar suas configurações de HTTPS, o que envolve inserir seu endereço de e-mail e concordar com os termos de serviço do Let's Encrypt.

  3. Quando a geração do certificado é concluída, o NGINX é recarregado com as novas configurações. O certbot gera uma mensagem indicando que a geração do certificado foi bem-sucedida e especificando o local do certificado no seu servidor.

    Congratulations! You have successfully enabled https://example.com and https://www.example.com 
    -------------------------------------------------------------------------------------
    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 2017-12-12.

    Observação : Os certificados Let's Encrypt expiram após 90 dias (em 12/12/2017 no exemplo). Para obter informações sobre a renovação automática de certificados, consulte Renovação automática de certificados Let's Encrypt abaixo.

Se você olhar para o nome de domínio .conf , verá que o certbot o modificou:

server {    listen 80 default_server;
    listen [::]:80 default_server;
    root /var/www/html;
    server_name  example.com www.example.com;

    listen 443 ssl; # managed by Certbot

    # RSA certificate
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot

    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot

    # Redirect non-https traffic to https
    if ($scheme != "https") {
        return 301 https://$host$request_uri;
    } # managed by Certbot
}

4. Renovar automaticamente os certificados Let’s Encrypt

Os certificados Let's Encrypt expiram após 90 dias. Recomendamos que você renove seus certificados automaticamente. Aqui, adicionamos uma tarefa cron a um arquivo crontab existente para fazer isso.

  1. Abra o arquivo crontab .

    $ crontab -e
  2. Adicione o comando certbot para ser executado diariamente. Neste exemplo, executamos o comando todos os dias ao meio-dia. O comando verifica se o certificado no servidor irá expirar nos próximos 30 dias e o renova em caso afirmativo. A diretiva --quiet informa ao certbot para não gerar saída.

    0 12 * * * /usr/bin/certbot renew --quiet
  3. Salve e feche o arquivo. Todos os certificados instalados serão renovados e recarregados automaticamente.

  4. Resumo

    Instalamos o agente Let’s Encrypt para gerar certificados SSL/TLS para um nome de domínio registrado. Configuramos o NGINX para usar os certificados e configurar renovações automáticas de certificados. Com os certificados Let’s Encrypt para NGINX e NGINX Plus, você pode ter um site simples e seguro instalado e funcionando em minutos.

    Para experimentar o Let's Encrypt com NGINX Plus, comece hoje mesmo seu teste gratuito de 30 dias ou entre em contato conosco para discutir seus casos de uso .

    Documentação relacionada

    Protegendo o tráfego HTTP para servidores upstream
    Protegendo o tráfego TCP para servidores upstream
    Terminação NGINX SSL


"Esta postagem do blog pode fazer referência a produtos que não estão mais disponíveis e/ou não têm mais suporte. Para obter as informações mais atualizadas sobre os produtos e soluções F5 NGINX disponíveis, explore nossa família de produtos NGINX . O NGINX agora faz parte do F5. Todos os links anteriores do NGINX.com redirecionarão para conteúdo semelhante do NGINX no F5.com."