GNU/Linux >> Znalost Linux >  >> Cent OS

Zabezpečte Nginx pomocí Lets Encrypt na CentOS 8

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í.

V tomto tutoriálu poskytneme pokyny krok za krokem, jak nainstalovat bezplatný certifikát Let's Encrypt SSL na CentOS 8 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, ujistěte se, že jste splnili následující předpoklady:

  • Máte název domény odkazující na vaši veřejnou IP. Použijeme example.com .
  • Na svém serveru CentOS máte nainstalovaný Nginx.
  • Váš firewall je nakonfigurován tak, aby přijímal připojení na portech 80 a 443.

Instalace Certbota #

Certbot je bezplatný nástroj příkazového řádku, který zjednodušuje proces získávání a obnovování certifikátů Let’s Encrypt SSL z vašeho serveru a automatické povolení HTTPS na vašem serveru.

Balíček certbot není součástí standardních úložišť CentOS 8, ale lze jej stáhnout z webu dodavatele.

Spusťte následující wget příkaz jako uživatel root nebo sudo ke stažení skriptu certbot do /usr/local/bin adresář:

sudo wget -P /usr/local/bin https://dl.eff.org/certbot-auto

Po dokončení stahování udělejte soubor spustitelným:

sudo chmod +x /usr/local/bin/certbot-auto

Generování silné 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.

Vygenerujte novou sadu 2048bitových parametrů DH zadáním následujícího příkazu:

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

Pokud chcete, můžete změnit délku klíče 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, 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 nginx /var/lib/letsencryptsudo chmod g+s /var/lib/letsencrypt

Abyste zabránili duplikaci kódu, vytvořte následující dva úryvky, které budou zahrnuty do všech souborů bloků serveru 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: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;

Výše uvedený fragment obsahuje č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í.

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

/etc/nginx/conf.d/example.com.conf
server {
  listen 80;
  server_name example.com www.example.com;

  include snippets/letsencrypt.conf;
}

Znovu načtěte konfiguraci Nginx, aby se změny projevily:

sudo systemctl reload nginx

Spusťte nástroj certbot s pluginem webroot a získejte soubory certifikátu SSL pro vaši doménu:

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

Pokud se jedná o první vyvolání certbot , nástroj nainstaluje chybějící závislosti.

Jakmile 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 2020-03-12. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot-auto
   again. To non-interactively renew *all* of your certificates, run
   "certbot-auto 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

Nyní, když máte soubory certifikátu, můžete upravit blokování doménového serveru následovně:

/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
}

S výše uvedenou konfigurací nutíme HTTPSand přesměrovat verzi www na jinou než www.

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

sudo systemctl reload nginx

Nyní 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í. Chcete-li certifikáty automaticky obnovit před vypršením platnosti, vytvořte cronjob, který se bude spouštět dvakrát denně a automaticky obnoví jakýkoli certifikát 30 dní před vypršením platnosti.

Použijte crontab příkaz k vytvoření nového cronjob:

sudo crontab -e

Vložte následující řádek:

0 */12 * * * root test -x /usr/local/bin/certbot-auto -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && /usr/local/bin/certbot-auto -q renew --renew-hook "systemctl reload nginx"

Uložte a zavřete soubor.

Chcete-li otestovat proces obnovení, můžete použít příkaz certbot následovaný příkazem --dry-run přepínač:

sudo ./certbot-auto renew --dry-run

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


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

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

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

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

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

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

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

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

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