Android

Nginx seguro com vamos criptografar no centos 7

Cómo asegurar sistemas web con SSL/TLS

Cómo asegurar sistemas web con SSL/TLS

Índice:

Anonim

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:

sudo yum install certbot

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:

/etc/nginx/conf.d/example.com.conf

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:

/etc/nginx/conf.d/example.com.conf

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:

sudo systemctl reload nginx

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 ssl

Esta 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 7