GNU/Linux >> Znalost Linux >  >> Linux

Jak zabezpečit Nginx pomocí Let's Encrypt SSL certifikátu

Let’s Encrypt je bezplatná, open source a automatizovaná certifikační autorita (CA) propagovaná společností Internet Security Research Group (ISRG) a nabízí certifikáty SSL/TLS pro šifrování komunikace zahrnující dvě strany.

Certifikát SSL na vašem webu nejen zvýší zabezpečení vašeho webu pomocí šifrování, ale také zlepší hodnocení SEO vašeho webu, protože Google zavedl povinné zahrnutí certifikátu SSL pro lepší hodnocení SEO.

V tomto článku se budeme ptát, jak zabezpečit server NGINX pomocí certifikátu Let’s Encrypt SSL v Ubuntu 18.04.

Předpoklady

  • Máte oprávnění otevřít relaci SSH na serveru Ubuntu 18.04 buď pomocí uživatele root nebo pomocí uživatele s povoleným sudo.
  • Už jste si nainstalovali NGINX podle našeho výukového programu odtud.
  • Název registrované domény.
  • DNS Záznam, který ukazuje na IP adresu vašeho serveru na základě názvu domény, kterou chcete použít.
Tento tutoriál vyžaduje použití doménových jmen. Kdykoli uvidíte proměnné SUBDOMAIN, DOMAIN nebo TLD, nahraďte je svými vlastními hodnotami.

Nainstalujte knihovnu Let’s Encrypt Client

Úplně prvním krokem, který musíte provést, je nainstalovat klientskou knihovnu Let’s Encrypt, která bude zase použita k vyžádání certifikátů od autority LE. Jedním ze způsobů, jak toho dosáhnout, je naklonovat klientskou knihovnu Let’s Encrypt z jejího oficiálního úložiště na vašem serveru.

Je také možné nainstalovat totéž z oficiálního úložiště Ubuntu. V úložišti Ubuntu je klientská knihovna známá jako certbot poskytované vývojáři Let’s Encrypt. Ale zvolíme dřívější způsob instalace, tj. klonováním úložiště Github Let’s Encrypt.

Chcete-li to provést, přejděte do zvolené instalační složky a naklonujte úložiště. Instalační složku jsem zvolil jako /usr/local , můžete si vybrat jinou složku podle vašeho prostředí.


# apt-get install git
# cd /usr/local
# git clone https://github.com/letsencrypt/letsencrypt

Přejděte do složky letsencrypt, najdete všechny klonované složky a soubory včetně certbota, které Let’s encrypt potřebuje, aby pro vás získal certifikáty.

Seznam umožňuje zašifrovat složku

Nakonfigurujte Let’s Encrypt pro ověření vaší domény

V procesu načítání certifikátu vytvoří klient Let’s Encrypt dočasný soubor v .well-known/acme-challenge složku. Tento soubor obsahuje token pro ověření skutečnosti, že skutečně vlastníte doménu, pro kterou se pokoušíte načíst certifikáty. Pamatujte, že uvedená složka spadá pod webový kořen domény.

Proto je bezpodmínečně nutné, aby Let’s Encrypt měl přístup k dočasnému souboru za účelem ověření domény. Chcete-li udělit přístup, musíte nakonfigurovat NGINX, protože je vlastníkem webového kořenového adresáře pro doménu. Přidejte blok umístění speciálně pro složku /.well-known/acme-challenge což umožní Let’s Encrypt umístit token pro ověření domény. Chcete-li to provést, upravte konfigurační soubor NGINX pro svého virtuálního hostitele. Nezapomeňte upravit kořenovou složku podle vašeho prostředí.



    server {
            listen 80;
            server_name SUBDOMAIN.DOMAIN.TLD;
            root /var/www/html/wordpress;
            ...
            ...
            ...
            location /.well-known/acme-challenge {
               allow all; 
               default_type "text/plain";
            }
           ...
           ...
    }

Ověřte, že je konfigurační soubor syntakticky správný, a restartujte NGINX:


# nginx -t 
# systemctl restart nginx

Konfigurace brány UFW Firewall

Ubuntu 18.04 se dodává s výchozím správcem firewallu UFW a pokud jste jej již povolili a běží na vašem serveru, nebude povoleno připojení HTTP nebo HTTPS k serveru NGINX.

Je také možné, že se pokoušíte nainstalovat certifikáty na dříve nakonfigurovaný server a pravidla brány firewall již existují. Pravidla brány firewall můžete samozřejmě vypsat pomocí ufw status než budete pokračovat v povolení připojení HTTP a HTTPS na vašem serveru Ubuntu 18.04.

Spuštěním následující sady příkazů v terminálu povolte připojení HTTP a HTTPS na vašem serveru.


# ufw status
# ufw allow http
# ufw allow https
# ufw reload

Požádejte o šifrování SSL certifikátu

Požádejme o SSL certifikát pro vybranou doménu pomocí klienta Let’s Encrypt, kterého jsme dříve naklonovali. Přestože je k dispozici mnoho možností konfigurace, které lze použít se skriptem Let’s Encrypt při žádosti o certifikát, použijeme pouze následující možnosti.

  1. určitě :Tato možnost říká skriptu letsencrypt, aby získal pouze certifikát SSL. Konfiguraci NGINX provedeme ručně později.
  2. webroot :Tato možnost určuje plugin webroot, který se má použít v procesu ověřování názvu domény.
  3. webroot-path :Tato možnost nastavuje kořen domény a musí odkazovat na umístění webu, které jste nakonfigurovali v konfiguraci NGINX.
  4. souhlasím :Znamená souhlas se smluvními podmínkami Let’s Encrypt.
  5. e-mail :E-mail se používá k obdržení oznámení o vypršení platnosti od Let’s Encrypt, ale lze jej také použít k obnovení ztraceného klíče.
  6. d :Tato možnost určuje název domény, pro kterou bude požadován certifikát.

Nyní zkombinujte výše uvedené možnosti spolu s klientským skriptem letsencrypt a požádejte o certifikát pomocí následujících příkazů:


# cd /usr/local/letsencrypt
# ./letsencrypt-auto certonly --agree-tos --email [email protected] --webroot --webroot-path /var/www/html/wordpress -d SUBDOMAIN.DOMAIN.TLD

Načteno Umožňuje úspěšně zašifrovat certifikát

Skript Let’s Encrypt vám po úspěšném načtení certifikátů SSL zobrazí malou poznámku a certifikáty se uloží do /etc/letsencrypt/live složka.

Nakonfigurujte NGINX pro Let’s Encrypt SSL Certificate

V této fázi byl řetězec certifikátů Let’s Encrypt úspěšně uložen na váš server. Nyní pokračujte v konfiguraci souboru virtuálního hostitele pro zabezpečený webový server NGINX s povoleným SSL.

Vygenerujte klíč Diffie-Hellman

Ačkoli je použití klíče Diffie-Hellman při konfiguraci certifikátů Let’s Encrypt pomocí NGINX volitelné, primárně se používá jako metoda bezpečné výměny kryptografických klíčů pro použití v certifikátu Let’s encrypt.


# mkdir -p /etc/nginx/ssl
# cd /etc/nginx/ssl
# openssl dhparam -out /etc/nginx/ssl/dhparam.pem 4096

Umístil jsem soubor parametrů DH do /etc/nginx/ssl adresář jednoduše pro pohodlí. Soubor můžete umístit na jiné místo.

Konfigurace parametrů SSL

Dále přidejte parametry pro připojení SSL, jako jsou verze protokolů, šifrovací sady, relace, hlavičky, které by měl váš server podporovat, do samostatného souboru.

Tím se nastaví silná šifrovací sada, která povolí dopředné utajení, kdykoli je to možné. Dále také umožníme HSTS a HPKP zpevnit server NGINX pro připojení SSL. To umožní silnou a do budoucna odolnou konfiguraci SSL, abyste získali hodnocení A+ v testu SSL Qualys Labs .


# vi /etc/nginx/conf.d/ssl.conf
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
server_tokens off;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
#Online Certificate Status Protocol Stapling
ssl_stapling on;
ssl_stapling_verify on;
ssl_session_tickets off;
#HTTP Strict Transport Security
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
ssl_trusted_certificate /etc/letsencrypt/live/SUBDOMAIN.DOMAIN.TLD/chain.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
add_header X-Frame-Options DENY;
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options nosniff;
add_header X-Robots-Tag none;

Upravit virtuálního hostitele NGINX

Nakonec upravte bloky serveru NGINX pro vybranou doménu. Přejděte do výchozího umístění pro bloky serveru NGINX, což je /etc/nginx/sites-available a upravte soubor virtuálního hostitele NGINX.


# vi /etc/nginx/sites-available/your_nginx_file.conf

server {
         listen 80;
         listen [::]:80;
         server_name SUBDOMAIN.DOMAIN.TLD;
         return 301 https://$host$request_uri;
}
...
...

Výše uvedený blok serveru dává NGINX pokyn, aby naslouchal všem příchozím požadavkům na portu 80 pro doménu SUBDOMAIN.DOMAIN.TLD a přesměrujte totéž do sekce https, jejíž konfigurace je uvedena níže.


...
...
server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;

        root   /var/www/html/wordpress;
        index index.html index.php index.htm;

        server_name  SUBDOMAIN.DOMAIN.TLD;
        error_log /var/log/nginx/SUBDOMAIN.DOMAIN.TLD-error.log debug;
        access_log /var/log/nginx/SUBDOMAIN.DOMAIN.TLD-access.log;

        ssl_certificate /etc/letsencrypt/live/SUBDOMAIN.DOMAIN.TLD/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/SUBDOMAIN.DOMAIN.TLD/privkey.pem;

        include /etc/nginx/conf.d/ssl.conf;

        location /.well-known/acme-challenge {
               allow all;
               default_type "text/plain";
        }

        location / {
            try_files $uri $uri/ =404;
        }

        location = /favicon.ico {
                log_not_found off;
                access_log off;
        }

        location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
        }

        location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                expires max;
                log_not_found off;
        }
}

Zkontrolujte, zda konfigurační soubor neobsahuje nějakou syntaktickou chybu:


# nginx -t 

Chcete-li aktivovat blok serveru, vytvořte symbolický odkaz na výše uvedený konfigurační soubor virtuálního hostitele uvnitř /etc/nginx/sites-enabled složka.


# cd /etc/nginx/sites-enabled
# ln -s ../sites-available/your_nginx_file.conf .

Chcete-li použít nová nastavení, znovu načtěte NGINX:


# systemctl reload nginx

Chcete-li analyzovat konfiguraci výše uvedených nastavení SSL, nasměrujte svůj prohlížeč na Test SSL Labs, zadejte název své domény a klikněte na „Odeslat“. Počkejte minutu, než se zobrazí souhrn testu. Hodnocení A+ znamená, že jsme do procesu zabezpečení serveru NGINX zahrnuli většinu možností SSL.

Automatické obnovení certifikátu Let’s Encrypt

Certifikáty Let’s Encrypt mají platnost 90 dní. Důvodem je omezit škody způsobené kompromisem klíče a podpořit automatizaci.

Chcete-li zautomatizovat proces obnovy certifikátu, vytvořte cronjob pomocí crontab a přidejte řádek skriptu, který se spustí jednou týdně, aby se obnovily certifikáty, když jejich platnost brzy vyprší.


# crontab -e
45 4 * * 6 cd /usr/local/letsencrypt/ && ./certbot-auto renew && systemctl restart nginx

Výše uvedený jednořádkový skript se spustí každou sobotu, aby zkontroloval, zda jsou certifikáty k obnovení, a pokud ano, obnoví certifikáty a poté restartuje NGINX server.

Všimněte si, že není plně optimalizován, protože server NGINX se restartuje, i když certifikát není obnoven. Nejlepší možností by bylo napsat vlastní skript pro obnovení certifikátu SSL a restartování serveru NGINX, pokud jsou certifikáty skutečně obnoveny.

Závěr

V tomto článku jsme se naučili, jak nainstalovat klientskou knihovnu Let’s Encrypt, požádat o certifikát pro vaši doménu a jak nakonfigurovat certifikáty Let’s Encrypt SSL pomocí NGINX. Dále, příklad cronjob také ukazuje, jak se pravidelně starat o proces obnovy certifikátu.


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

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

  3. Jak nastavit WSO2 s certifikátem Let’s Encrypt

  1. Jak zabezpečit účet s podporou cPanel pomocí certifikátu Lets Encrypt SSL

  2. Jak zabezpečit Nginx pomocí SSL a Let's Encrypt ve FreeBSD

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

  1. Jak nastavit Let's Encrypt SSL certifikát s Nginx na Debian 10 / Debian 9

  2. Jak nainstalovat Let's Encrypt SSL s Apache na Debian 11

  3. Jak získat bezplatný certifikát SSL s SSL It! a Let's Encrypt na Plesku