Tableless

Busca Menu

Adicionando SSL no NGINX com o Let’s Encrypt

Seja o primeiro a comentar por

O Let’s Encrypt é uma forma fácil, automatizada e gratuita de se inserir SSL em uma aplicação web. A utilização do SSL é bem importante quando se há autenticação, tráfego de dados privados ou até mesmo para ser melhor colocado no ranking do Google.

Neste artigo vou demonstrar como gerar e adicionar o SSL no NGINX com a ferramenta Let’s Encrypt. Irei utilizar o sistema operacional Debian para executar os comandos, mas estes podem ser facilmente modificados para serem executados em qualquer distro.

Instalando o Let’s Encrypt:

Clone o projeto no github e redirecione para o caminho /opt/letsencrypt:

$ sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

É necessário ter o git instalado, caso não tenha:

$ sudo apt-get install git

Preparando o NGINX para ser validado:

O Let’s Encrypt valida se o domínio realmente é seu, então para isso é necessário adicionar uma regra no seu site do NGINX. Adicione o location ^/.well-known no seu site (/etc/nginx/sites-enabled/yoursite), como por exemplo:

server {  
    listen 80;
    server_name your-domain.com.br;

    location ~ ^/.well-known {
        root /var/www/yoursite;
    }

    location / {
        return 301 https://www.$server_name$request_uri;
    }
}

Este location será requisitado pelo Let’s Encrypt para confirmar sua identidade. Lembrando que você deve substituir o root e o server_name.

Após adicionar o well-known, reinicie o seu NGINX:

$ sudo systemctl restart nginx

É bom lembrar que o seu domínio deve estar apontando para sua aplicação para obter sucesso com o SSL.

Gerando o SSL com o Let’s Encrypt:

Substitua no comando abaixo, o caminho /var/www/yoursite pelo diretório raiz do seu site no NGINX, e também o yourdomain.com.br e www.yourdomain.com.br pelo seu domínio:

$ sudo /opt/letsencrypt/letsencrypt-auto certonly -a webroot --webroot-path=/var/www/yoursite -d yourdomain.com.br -d www.yourdomain.com.br

Neste processo irá ser solicitado seu e-mail, para caso necessite da recuperação de seu certificado.

Adicionando o certificado em sua aplicação:

Após o certificado ser gerado com sucesso, altere novamente o seu arquivo de regras do seu site (/etc/nginx/sites-enabled/yoursite), adicionando mais um server, desta vez o de ssl:

server {  
    listen 443 ssl;
    server_name yourdomain.com.br www.yourdomain.com.br;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_buffering off;
    }

    location ~ ^/.well-known {
        root /var/www/yoursite;
    }

    ssl_certificate /etc/letsencrypt/live/yourdomain.com.br/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com.br/privkey.pem;
}

Lembrando que você deve alterar o location / com as configurações específicas da sua aplicação web.

Reinicie novamente o seu NGINX:

$ sudo systemctl restart nginx

Entre em seu domínio utilizando o https e veja se o processo ocorreu com sucesso.

Conferindo a qualidade do seu SSL:

Altere example.com pelo seu domínio:

https://www.ssllabs.com/ssltest/analyze.html?d=example.com

Melhorando a qualidade do seu certificado:

É importante validar as cifras utilizadas, limitar a versão do protocolo SSL, entre outras coisas. Para isso, recomendo a leitura do seguinte tópico na wiki da Mozilla, Server Side TLS. Existe também o Mozilla SSL Configuration Generator, um gerador de configuração SSL para diversos servidores de aplicação.

Renovando seu certificado com crontab:

O certificado gerado é válido por 3 meses, para facilitar a renovação, você pode criar um cronjob para fazer este trabalho:

$ crontab -e

Adicione no final do arquivo:

0 0 1 */2 * /opt/letsencrypt/letsencrypt-auto renew --quiet --no-self-upgrade  
0 0 1 */2 * systemctl reload nginx  

Concluindo:

Neste artigo foi demonstrando a geração do SSL para o NGINX, mas este mesmos passos podem ser facilmente executados em qualquer servidor de aplicação, com algumas modificações. Lembrando que existem outros comandos específicos da ferramenta Let’s Encrypt, como letsencrypt-apache que faz todo o trabalho pra você no caso do Apache, mas tentei demonstrar a forma genérica, que pode servir para outros servidores.

Referências e Links:


O certificado SSL também pode ser contratado na 1&1 ou Certisign.

Publicado no dia