Android

Zabezpečte nginx pomocí šifrování na Ubuntu 16.04

How to install Apache webserver | in linux

How to install Apache webserver | in linux

Obsah:

Anonim

Let's Encrypt je bezplatná a otevřená certifikační autorita vyvinutá společností Internet Security Research Group (ISRG). Certifikáty vydané Let's Encrypt jsou dnes důvěryhodné téměř všemi prohlížeči.

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

Předpoklady

Před pokračováním v tomto kurzu se ujistěte, že jste splnili následující předpoklady:

  • Máte doménové jméno ukazující na IP vašeho veřejného serveru. V tomto tutoriálu použijeme example.com . Nginx máte nainstalován podle pokynů Jak nainstalovat Nginx na Ubuntu 16.04.

Nainstalujte Certbot

Certbot je nástroj napsaný v Pythonu, který dokáže automatizovat úkoly pro získání a obnovu Let's Encrypt SSL SSL a konfiguraci webových serverů.

Nejprve nainstalujte balíček software-properties-common , který poskytuje nástroj add-apt-repository potřebný pro přidání dalších PPA.

Aktualizujte index balíčků a nainstalujte software-properties-common s:

sudo apt update sudo apt install software-properties-common

Po dokončení instalace přidejte úložiště certbot PPA do systému pomocí následujícího příkazu:

sudo add-apt-repository ppa:certbot/certbot

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

sudo apt update sudo apt install certbot

Vytvořte silnou skupinu Dh (Diffie-Hellman)

Výměna klíčů Diffie – Hellman (DH) je metoda bezpečné výměny kryptografických klíčů přes nezajištěný komunikační kanál. Vygenerujte novou sadu 2048bitových DH parametrů pro posílení 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 tomto případě může generování trvat déle než 30 minut v závislosti na entropii systému.

Získání šifrovaného certifikátu SSL

K získání certifikátu SSL pro naši doménu použijeme plugin Webroot, který funguje vytvořením dočasného souboru pro ověření požadované domény v adresáři ${webroot-path}/.well-known/acme-challenge . Server Pojďme šifrovat provede požadavky HTTP na dočasný soubor, aby ověřil, že se požadovaná doména převede na server, na kterém je spuštěn certbot.

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

Následující příkazy vytvoří adresář a učiní jej zapisovatelným pro server Nginx.

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

Chcete-li se vyhnout duplicitě kódu, vytvořte následující dva úryvky, které zahrneme do všech našich blokových souborů serveru Nginx.

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

Úryvek výše obsahuje chippers doporučované Mozillou, umožňuje OCSP sešívání, HTTP Strict Transport Security (HSTS) a vynucuje několik záhlaví HTTP zaměřených na zabezpečení.

Po vytvoření úryvků otevřete blok serveru domény a letsencrypt.conf útržek letsencrypt.conf jak je uvedeno níže:

/etc/nginx/sites-available/example.com.conf

server { listen 80; server_name example.com www.example.com; include snippets/letsencrypt.conf; }

Blok serveru aktivujte vytvořením symbolického odkazu z sites-available na sites-enabled :

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

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

sudo systemctl reload nginx

Spusťte skript certbot s pluginem webroot a získejte soubory certifikátů SSL:

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-04-23. 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:

Nyní, když máme soubory certifikátů, upravte blok serveru domény následujícím způsobem:

/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í nutíme HTTPS a přesměrujeme www verzi domény na non www verzi non www .

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

sudo systemctl reload nginx

Automatické obnovení certifikátu SSL

Certifikáty šifrování jsou platné 90 dní. Chcete-li automaticky obnovit certifikáty před vypršením jejich platnosti, vytvoří balíček certbot cronjob, který bude spuštěn dvakrát denně a automaticky obnoví jakýkoli certifikát 30 dní před jeho vypršením.

Protože po obnovení certifikátu používáme plug-in webového kořenového modulu certbot, musíme službu nginx znovu načíst. Chcete-li tak učinit, připojte --renew-hook "systemctl reload nginx" k souboru /etc/cron.d/certbot tak, jak vypadá takto:

/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 obnovy, použijte přepínač certbot --dry-run :

sudo certbot renew --dry-run

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

Závěr

V tomto tutoriálu jste použili klienta Let's Encrypt, certbot k získání certifikátů SSL pro vaši doménu. Také jste vytvořili úryvky Nginx, abyste zabránili duplicitě kódu, a nakonfigurovali jste Nginx, aby používal certifikáty. Na konci tutoriálu jste nastavili cronjob pro automatické obnovení certifikátu.

nginx ubuntu pojďme zašifrovat certbot ssl