GNU/Linux >> Znalost Linux >  >> Debian

Zabezpečte Nginx pomocí Lets Encrypt na Debian 10 Linux

Let’s Encrypt je bezplatná, automatizovaná a otevřená certifikační autorita vyvinutá organizací Internet Security Research Group (ISRG), která poskytuje bezplatné certifikáty SSL.

Certifikáty vydané Let’s Encrypt jsou důvěryhodné pro všechny hlavní prohlížeče a jsou platné 90 dní od data vydání.

Tento tutoriál ukazuje, jak nainstalovat bezplatný certifikát Let's Encrypt SSL na Debian 10, Buster se systémem Nginx jako webový server. Také si ukážeme, jak nakonfigurovat Nginx, aby používal certifikát SSL a povolil HTTP/2.

Předpoklady #

Než budete pokračovat s průvodcem, ujistěte se, že jsou splněny následující předpoklady:

  • Přihlášen jako uživatel root nebo uživatel s právy sudo.
  • Doména, pro kterou chcete získat certifikát SSL, musí odkazovat na IP vašeho veřejného serveru. Použijeme example.com .
  • Nginx nainstalován.

Instalace Certbota #

K získání a obnovení certifikátů použijeme nástroj certbot.

Certbot je plně vybavený a snadno použitelný nástroj, který automatizuje úlohy získávání a obnovování certifikátů Let’s Encrypt SSL a konfiguraci webových serverů pro použití certifikátů.

Balíček certbot je součástí výchozích repozitářů Debianu. Chcete-li nainstalovat certbot, spusťte následující příkazy:

sudo apt updatesudo apt install certbot

Generování Dh (Diffie-Hellman) skupiny #

Výměna klíčů Diffie–Hellman (DH) je metoda bezpečné výměny kryptografických klíčů přes nezabezpečený komunikační kanál.

Chystáme se vygenerovat novou sadu 2048bitových parametrů DH, abychom posílili zabezpečení:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Můžete také změnit velikost až na 4096 bitů, ale generování může trvat déle než 30 minut v závislosti na entropii systému.

Získání certifikátu Let’s Encrypt SSL #

K získání certifikátu SSL pro doménu použijeme plugin Webroot. Funguje tak, že vytvoří dočasný soubor pro ověření požadované domény v ${webroot-path}/.well-known/acme-challenge adresář. Server Let's Encrypt odesílá požadavky HTTP na dočasný soubor, aby ověřil, že se požadovaná doména překládá na server, na kterém běží certbot.

Budeme mapovat všechny požadavky HTTP pro .well-known/acme-challenge do jednoho adresáře, /var/lib/letsencrypt .

Spuštěním následujících příkazů vytvořte adresář a udělejte jej zapisovatelný pro server Nginx:

sudo mkdir -p /var/lib/letsencrypt/.well-knownsudo chgrp www-data /var/lib/letsencryptsudo chmod g+s /var/lib/letsencrypt

Abychom se vyhnuli duplikaci kódu, vytvoříme dva úryvky, které budou zahrnuty do všech blokových souborů serveru Nginx.

Otevřete textový editor a vytvořte první úryvek, letsencrypt.conf :

sudo nano /etc/nginx/snippets/letsencrypt.conf
/etc/nginx/snippets/letsencrypt.conf
location ^~ /.well-known/acme-challenge/ {
  allow all;
  root /var/lib/letsencrypt/;
  default_type "text/plain";
  try_files $uri =404;
}

Druhý fragment ssl.conf zahrnuje čipy doporučené Mozillou, umožňuje sešívání OCSP, HTTP Strict Transport Security (HSTS) a vynucuje několik hlaviček HTTP zaměřených na zabezpečení.

sudo nano /etc/nginx/snippets/ssl.conf
/etc/nginx/snippets/ssl.conf
ssl_dhparam /etc/ssl/certs/dhparam.pem;

ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;

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=63072000" always;
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;

Po dokončení otevřete blockfile doménového serveru a zahrňte letsencrypt.conf úryvek, jak je uvedeno níže:

sudo nano /etc/nginx/sites-available/example.com.conf
/etc/nginx/sites-available/example.com.conf
server {
  listen 80;
  server_name example.com www.example.com;

  include snippets/letsencrypt.conf;
}

Vytvořte symbolický odkaz na sites-enabled adresář pro povolení blokování doménového serveru:

sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/

Restartujte službu Nginx, aby se změny projevily:

sudo systemctl restart nginx

Nyní jste připraveni získat soubory certifikátu SSL spuštěním následujícího příkazu:

sudo certbot certonly --agree-tos --email [email protected] --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com

Pokud je certifikát SSL úspěšně získán, na vašem terminálu se vytiskne následující zpráva:

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 2020-02-22. 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:                    https://eff.org/donate-le

Upravte blok doménového serveru a zahrňte soubory certifikátu SSL následovně:

sudo nano /etc/nginx/sites-available/example.com.conf
/etc/nginx/sites-available/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
}

Výše uvedená konfigurace říká Nginxu, aby přesměroval z HTTP na HTTPS a z www na verzi bez www.

Restartujte nebo znovu načtěte službu Nginx, aby se změny projevily:

sudo systemctl restart nginx

Otevřete svůj web pomocí https:// a všimnete si zelené ikony zámku.

Pokud svou doménu otestujete pomocí testu serveru SSL Labs, získáte A+ stupeň, jak je znázorněno na obrázku níže:

Automatické obnovení certifikátu Let’s Encrypt SSL #

Certifikáty Let’s Encrypt jsou platné 90 dní. Aby se automaticky obnovily certifikáty před vypršením jejich platnosti, vytvoří balíček certbot cronjob a systemd timer. Časovač automaticky obnoví certifikáty 30 dní před vypršením platnosti.

Když je certifikát obnoven, musíme také znovu načíst službu nginx. Otevřete /etc/letsencrypt/cli.ini a přidejte následující řádek:

sudo nano /etc/letsencrypt/cli.ini
/etc/cron.d/certbot
deploy-hook = systemctl reload nginx

Otestujte proces automatického obnovení spuštěním tohoto příkazu:

sudo certbot renew --dry-run

Pokud nejsou žádné chyby, znamená to, že proces obnovení byl úspěšný.


Debian
  1. Jak zabezpečit Nginx pomocí Lets Encrypt na Ubuntu 20.04 / 18.04

  2. Zabezpečte Apache2 pomocí Let's Encrypt SSL na Debianu 10/11

  3. Zabezpečte Nginx pomocí Let's Encrypt SSL na Debianu 10/11

  1. Zabezpečte Nginx pomocí Lets Encrypt na Ubuntu 18.04

  2. Zabezpečte Nginx pomocí Lets Encrypt na Ubuntu 16.04

  3. Zabezpečte Nginx pomocí Lets Encrypt na Ubuntu 20.04

  1. Zabezpečte Apache pomocí Lets Encrypt na Ubuntu 20.04

  2. Zabezpečte Nginx pomocí Lets Encrypt na CentOS 7

  3. Zabezpečte Nginx pomocí Lets Encrypt na CentOS 8