Cómo asegurar sistemas web con SSL/TLS
Índice:
- Pré-requisitos
- Instale o Certbot
- Gerar grupo Dh forte (Diffie-Hellman)
- Obtendo um certificado SSL Let's Encrypt
- Renovação automática Vamos criptografar o certificado SSL
- Conclusão
Let's Encrypt é uma autoridade de certificação aberta e gratuita desenvolvida pelo Internet Security Research Group (ISRG). Os certificados emitidos pelo Let's Encrypt são confiáveis por quase todos os navegadores hoje.
Neste tutorial, forneceremos instruções passo a passo sobre como proteger seu Nginx com o Let's Encrypt usando a ferramenta certbot no CentOS 7.
Pré-requisitos
Verifique se você atendeu aos seguintes pré-requisitos antes de continuar com este tutorial:
- Você tem um nome de domínio apontando para o IP do servidor público. Neste tutorial, usaremos
example.com. Você ativou o repositório EPEL e instalou o Nginx seguindo Como instalar o Nginx no CentOS 7.
Instale o Certbot
O Certbot é uma ferramenta fácil de usar que pode automatizar as tarefas de obtenção e renovação de certificados SSL Let's Encrypt e configuração de servidores da web.
Para instalar o pacote certbot, execute o repositório EPEL:
Gerar grupo Dh forte (Diffie-Hellman)
A troca de chaves Diffie – Hellman (DH) é um método de troca segura de chaves criptográficas por um canal de comunicação não seguro.
Gere um novo conjunto de parâmetros DH de 2048 bits digitando o seguinte comando:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Se desejar, você pode alterar o tamanho até 4096 bits, mas, nesse caso, a geração pode demorar mais de 30 minutos, dependendo da entropia do sistema.
Obtendo um certificado SSL Let's Encrypt
Para obter um certificado SSL para o nosso domínio, usaremos o plug-in Webroot que funciona criando um arquivo temporário para validar o domínio solicitado no diretório
${webroot-path}/.well-known/acme-challenge
. O servidor Let's Encrypt faz solicitações HTTP para o arquivo temporário para validar que o domínio solicitado seja resolvido no servidor em que o certbot é executado.
Para simplificar,
/var/lib/letsencrypt
todas as solicitações HTTP para
.well-known/acme-challenge
em um único diretório,
/var/lib/letsencrypt
.
Os comandos a seguir criarão o diretório e o gravarão no servidor Nginx.
sudo mkdir -p /var/lib/letsencrypt/.well-known
sudo chgrp nginx /var/lib/letsencrypt
sudo chmod g+s /var/lib/letsencrypt
Para evitar a duplicação de código, crie os dois trechos a seguir que vamos incluir em todos os nossos arquivos de bloco do servidor Nginx:
sudo mkdir /etc/nginx/snippets
/etc/nginx/snippets/letsencrypt.conf
location ^~ /.well-known/acme-challenge/ { allow all; root /var/lib/letsencrypt/; default_type "text/plain"; try_files $uri =404; }
/etc/nginx/snippets/ssl.conf
ssl_dhparam /etc/ssl/certs/dhparam.pem; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_session_tickets off; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS'; ssl_prefer_server_ciphers on; ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 30s; add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload"; add_header X-Frame-Options SAMEORIGIN; add_header X-Content-Type-Options nosniff;
O snippet acima inclui os trituradores recomendados pela Mozilla, habilita o grampeamento OCSP, HSTS (HTTP Strict Transport Security) e aplica poucos cabeçalhos HTTP com foco em segurança.
Após a criação dos trechos, abra o bloco do servidor de domínio e inclua o trecho
letsencrypt.conf
como mostrado abaixo:
server { listen 80; server_name example.com www.example.com; include snippets/letsencrypt.conf; }
Recarregue a configuração do Nginx para que as alterações entrem em vigor:
sudo systemctl reload nginx
Agora você pode executar o Certbot com o plugin webroot e obter os arquivos de certificado SSL para seu domínio emitindo:
sudo certbot certonly --agree-tos --email [email protected] --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com
Se o certificado SSL for obtido com sucesso, o certbot imprimirá a seguinte mensagem:
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-06-11. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. 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:
Agora que você possui os arquivos de certificado, pode editar o bloco do servidor de domínio da seguinte maneira:
server { listen 80; server_name www.example.com example.com; include snippets/letsencrypt.conf; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name www.example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; include snippets/ssl.conf; include snippets/letsencrypt.conf; return 301 https://example.com$request_uri; } server { listen 443 ssl http2; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; include snippets/ssl.conf; include snippets/letsencrypt.conf; #… other code }
Com a configuração acima, estamos forçando o HTTPS e redirecionando a www para a versão não www.
Por fim, recarregue o serviço Nginx para que as alterações entrem em vigor:
Renovação automática Vamos criptografar o certificado SSL
Os certificados do Let's Encrypt são válidos por 90 dias. Para renovar automaticamente os certificados antes que eles expirem, criaremos um cronjob que será executado duas vezes por dia e renovará automaticamente qualquer certificado 30 dias antes de sua expiração.
Execute o comando
crontab
para criar um novo cronjob:
sudo crontab -e
Cole as seguintes linhas:
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload nginx"
Salve e feche o arquivo.
Para testar o processo de renovação, você pode usar o comando certbot seguido pela opção
--dry-run
:
sudo certbot renew --dry-run
Se não houver erros, significa que o processo de renovação do teste foi bem-sucedido.
Conclusão
Neste tutorial, você usou o cliente Let's Encrypt, certbot para baixar certificados SSL para o seu domínio. Você também criou trechos do Nginx para evitar duplicação de código e configurou o Nginx para usar os certificados. No final do tutorial, você configurou um cronjob para renovação automática de certificado.
centos nginx vamos criptografar certbot sslEsta postagem é parte da Instalação do LEMP Stack no CentOS 7 series.
Outras postagens nesta série:
• Como instalar o Nginx no CentOS 7 • Nginx seguro com Let's Encrypt no CentOS 7 • Instale o MariaDB no CentOS 7 • Instale o PHP 7 no CentOS 7 • Como configurar os blocos de servidor Nginx no CentOS 7Nginx seguro com vamos criptografar no ubuntu 18.04
Let's Encrypt é uma autoridade de certificação aberta e gratuita desenvolvida pelo Internet Security Research Group. Neste tutorial, forneceremos instruções passo a passo sobre como proteger seu Nginx com o Let's Encrypt usando a ferramenta certbot no Ubuntu 18.04
Apache seguro com vamos criptografar no centos 7
Neste tutorial, abordaremos as etapas necessárias para instalar um certificado SSL Let's Encrypt criptografado gratuitamente em um servidor CentOS 7 executando o Apache como um servidor web.
Nginx seguro com vamos criptografar no centos 8
Neste tutorial, forneceremos instruções passo a passo sobre como instalar um certificado SSL Let's Encrypt criptografado gratuitamente no CentOS 8 executando o Nginx como um servidor da web. Também mostraremos como configurar o Nginx para usar o certificado SSL e ativar o HTTP / 2.







