Nota do editor – A postagem do blog que detalha o procedimento original para usar o Let’s Encrypt com o NGINX (de fevereiro de 2016) redireciona para esta página. As instruções daquela postagem estão obsoletas.
Esta publicação foi atualizada para eliminar a dependência do certbot‑auto, que a Electronic Frontier Foundation (EFF) descontinuou no Certbot 1.10.0 para Debian e Ubuntu e no Certbot 1.11.0 para todos os outros sistemas operacionais. Para mais detalhes e métodos alternativos de instalação, consulte esta publicação da EFF.
Veja também nossa publicação no blog sobre a nginx.conf 2015, na qual Peter Eckersley e Yan Zhu, da Electronic Frontier Foundation, apresentam a então recém-criada autoridade certificadora Let’s Encrypt.
É amplamente reconhecido que a criptografia SSL/TLS do seu site resulta em melhores posições nos resultados de busca e mais segurança para os usuários. No entanto, existem várias barreiras que têm impedido os proprietários de sites de adotar o SSL.
Dois dos maiores obstáculos têm sido o custo e os processos manuais envolvidos na obtenção de um certificado. Mas agora, com o Let’s Encrypt, eles deixaram de ser uma preocupação. O Let’s Encrypt disponibiliza gratuitamente a criptografia SSL/TLS para todos.
A Let’s Encrypt é uma autoridade certificadora (CA) gratuita, automatizada e aberta. Sim, é isso mesmo: certificados SSL/TLS gratuitos. Atualmente, os certificados emitidos pela Let’s Encrypt são considerados confiáveis pela maioria dos navegadores, inclusive por navegadores mais antigos, como o Internet Explorer no Windows XP SP3. Além disso, a Let’s Encrypt automatiza totalmente tanto a emissão quanto a renovação de certificados.
Nesta publicação do blog, explicamos como usar o cliente do 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 do Let’s Encrypt, executado no seu host, cria um arquivo temporário (um token) contendo as informações necessárias. Em seguida, o servidor de validação do Let’s Encrypt faz uma solicitação HTTP para recuperar o arquivo e valida o token, confirmando que o registro DNS do seu domínio aponta para o servidor no qual o cliente do Let’s Encrypt está sendo executado.
Pré-requisitos
Antes de começar a usar o Let’s Encrypt, você precisa:
- Tenha o NGINX ou o NGINX Plus instalado.
- Seja proprietário ou tenha controle sobre 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 ao 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, daqui em diante usaremos apenas NGINX).
Observação: testamos o procedimento descrito nesta publicação do blog no Ubuntu 16.04 (Xenial).
1. Baixe o cliente do Let’s Encrypt
Primeiro, baixe o cliente do Let’s Encrypt, certbot.
Como mencionado logo 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-nginxNo Ubuntu 18.04 e versões posteriores, use a versão para Python 3:
$ apt-get update$ sudo apt-get install certbot
$ apt-get install python3-certbot-nginx2. Configure o NGINX
certbot pode configurar automaticamente o NGINX para SSL/TLS. Ele procura e modifica o bloco server na configuração do NGINX que contém uma diretiva server_name com o nome de domínio para o qual você está solicitando um certificado. Em nosso exemplo, o domínio é www.example.com.
- Supondo que você esteja começando com uma instalação nova do NGINX, use um editor de texto para criar um arquivo no diretório /etc/nginx/conf.d chamado nome‑do‑domínio.conf (portanto, em nosso exemplo, www.example.com.conf).
- Especifique seu nome de domínio (e as 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;
}- Salve o arquivo e execute este comando para verificar a sintaxe da sua configuração e reiniciar o NGINX:
$ nginx -t && nginx -s reload3. Obtenha o certificado SSL/TLS
O plug-in do NGINX para o certbot se encarrega de reconfigurar o NGINX e recarregar sua configuração sempre que necessário.
- Execute o comando a seguir para gerar certificados com o plug-in do NGINX:
$ sudo certbot --nginx -d example.com -d www.example.com- Responda às solicitações do
certbotpara definir suas configurações de HTTPS. Para isso, você precisará inserir seu endereço de e-mail e concordar com os termos de serviço do Let’s Encrypt.
Quando a geração do certificado é concluída, o NGINX é recarregado com as novas configurações. certbot gera uma mensagem indicando que o certificado foi gerado com sucesso e especificando a localização dele no 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 do Let’s Encrypt expiram após 90 dias (em 12/12/2017 no exemplo). Para obter informações sobre como renovar certificados automaticamente, consulte Renovação automática de certificados do Let’s Encrypt abaixo.
Se você examinar nome-do-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. Renove automaticamente os certificados do Let’s Encrypt
Os certificados do Let’s Encrypt expiram após 90 dias. Recomendamos que você renove seus certificados automaticamente. Para isso, adicionamos uma tarefa cron a um arquivo crontab existente.
- Abra o arquivo crontab.
$ crontab -e- Adicione o comando
certbotpara ser executado diariamente. Neste exemplo, executamos o comando todos os dias ao meio-dia. O comando verifica se o certificado no servidor expirará nos próximos 30 dias e, em caso afirmativo, o renova. A diretiva--quietinstrui ocertbota não gerar nenhuma saída.
0 12 * * * /usr/bin/certbot renew --quiet- Salve e feche o arquivo. Todos os certificados instalados serão renovados e recarregados automaticamente.
Resumo
Instalamos o agente do Let’s Encrypt para gerar certificados SSL/TLS para um nome de domínio registrado. Configuramos o NGINX para usar os certificados e habilitamos a renovação automática deles. Com os certificados do Let’s Encrypt para NGINX e NGINX Plus, você pode colocar um site simples e seguro no ar em poucos minutos.
Para experimentar o Let’s Encrypt com o NGINX Plus, inicie sua avaliação gratuita de 30 dias hoje mesmo ou entre em contato conosco para conversar sobre seus casos de uso.
Documentação relacionada
Proteção do tráfego HTTP para servidores upstream
Proteção do tráfego TCP para servidores upstream
Terminação SSL do NGINX
Sobre o autor

Publicações relacionadas no blog

Como o F5 NGINX One aprimora o gerenciamento e a observabilidade
Descubra como o F5 NGINX One aprimora o gerenciamento e a observabilidade de ambientes híbridos e multicloud ao oferecer um console web centralizado baseado em SaaS, com insights em tempo real, conformidade automatizada e gerenciamento simplificado de configurações.

Do OpenAPI ao NGINX como gateway de API usando uma API declarativa
Descubra como transformar uma definição de esquema OpenAPI em uma configuração NGINX totalmente funcional, operando como um API Gateway com a segurança de um Web Application Firewall e um Portal do Desenvolvedor, usando uma abordagem declarativa de API.

Como gerenciar picos repentinos de tráfego e sobrecarga do servidor
Picos de tráfego e sobrecarga de servidores são preocupações sérias para varejistas online em qualquer época, mas especialmente durante a “Cyber Season” de compras de fim de ano. Detalhamos como você pode aproveitar as soluções de entrega de aplicações de nível de produção da NGINX para se preparar para aumentos repentinos de tráfego.

Distribuição segura de chaves privadas SSL com o NGINX
Descrevemos três maneiras progressivamente mais seguras de proteger chaves privadas SSL ao configurar o NGINX para processar tráfego HTTPS: permitir acesso de leitura apenas ao usuário root, criptografar as chaves com senhas armazenadas separadamente e distribuir as senhas a partir de um repositório central.
Agrupando solicitações de API em lotes com NGINX Plus e o módulo JavaScript do NGINX
O módulo JavaScript do NGINX lançado com o NGINX Plus R15 oferece suporte a subsolicitações, possibilitando uma classe totalmente nova de casos de uso para o NGINX Plus. Este exemplo completo também usa a API do NGINX Plus e os módulos de chave-valor para converter solicitações de API dos clientes em solicitações separadas para as APIs dos microsserviços que compõem um aplicativo.
Como superar o esgotamento de portas efêmeras no NGINX e no NGINX Plus
Confira dicas para evitar o esgotamento de portas efêmeras com ajustes no kernel do Linux, conexões keepalive e conexões vinculadas dinamicamente a endereços IP locais.