GNU/Linux >> Znalost Linux >  >> Ubuntu

Zabezpečte Nginx pomocí Lets Encrypt na Ubuntu 18.04

Let’s Encrypt je bezplatná a otevřená certifikační autorita vyvinutá organizací Internet Security Research Group (ISRG). Certifikáty vydané Let’s Encrypt dnes důvěřují téměř všem prohlížečům.

V tomto tutoriálu poskytneme pokyny krok za krokem, jak zabezpečit Nginx pomocí Let's Encrypt pomocí nástroje certbot na Ubuntu 18.04.

Předpoklady #

Než budete pokračovat v tomto kurzu, ujistěte se, že jste splnili následující předpoklady:

  • Máte název domény odkazující na IP vašeho veřejného serveru. V tomto tutoriálu budeme používat example.com .
  • Máte nainstalovaný Nginx podle těchto pokynů
  • Pro svou doménu máte blokovaný server. Podrobnosti o tom, jak jej vytvořit, naleznete podle těchto pokynů.

Instalovat Certbot #

Certbot je plně vybavený a snadno použitelný nástroj, který dokáže automatizovat ú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ářů Ubuntu.

Aktualizujte seznam balíčků a nainstalujte balíček certbot:

sudo apt updatesudo apt install certbot

Generate Strong Dh (Diffie-Hellman) Group #

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
Pokud chcete, můžete změnit velikost až na 4096 bitů, ale v takovém případě může generování 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 naši doménu použijeme plugin Webroot, který 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.

Aby to bylo jednodušší, namapujeme všechny požadavky HTTP pro .well-known/acme-challenge do jednoho adresáře, /var/lib/letsencrypt .

Následující příkazy vytvoří adresář a učiní 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

Abyste se vyhnuli duplikaci kódu, vytvořte následující dva úryvky, které zahrneme do všech našich 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;
}

Vytvořte druhý fragment ssl.conf který 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: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;

Po vytvoření úryvků otevřete blok 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;
}

Abychom povolili nový soubor blokování serveru, musíme ze souboru vytvořit symbolický odkaz na sites-enabled adresář, který Nginx čte během spouštění:

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í můžete spustit Certbot s pluginem webroot a získat soubory certifikátu SSL vydáním:

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, certbot vytiskne následující zprávu:

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-07-28. 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"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - 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

Nyní, když máte soubory certifikátu, můžete upravit blok vašeho doménového serveru 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
}

S výše uvedenou konfigurací vynucujeme přesměrování HTTPSand z verze www na verzi bez www.

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

sudo systemctl reload nginx

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, který běží dvakrát denně a automaticky obnoví jakýkoli certifikát 30 dní před vypršením jeho platnosti.

Protože po obnovení certifikátu používáme zásuvný modul certbot webroot, musíme také znovu načíst službu nginx. Připojte --renew-hook "systemctl reload nginx" do /etc/cron.d/certbot soubor, takže to vypadá takto:

sudo nano /etc/cron.d/certbot
/etc/cron.d/certbot
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"

Chcete-li otestovat proces obnovení, můžete použít certbot --dry-run přepínač:

sudo certbot renew --dry-run

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


Ubuntu
  1. Zabezpečte Nginx pomocí Let's Encrypt na Ubuntu 18.04 - Jak na to?

  2. Jak zabezpečit Nginx pomocí Letsencrypt na Ubuntu 20.04

  3. Jak zabezpečit Nginx pomocí Let's Encrypt na Ubuntu 20.04

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

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

  3. Zabezpečte Apache pomocí Lets Encrypt na Ubuntu 18.04

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

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

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