V tomto článku vysvětlíme nezbytné kroky k zabezpečení Nginx pomocí let's encrypt na CentOS 8. Než budete pokračovat v tomto tutoriálu, ujistěte se, že jste přihlášeni jako uživatel s sudo
privilegia. Všechny příkazy v tomto tutoriálu by měly být spouštěny jako uživatel bez oprávnění root.
Let's Encrypt je certifikační autorita, která poskytuje bezplatné SSL certifikáty pro web, funguje od dubna 2016 a je podporována společnostmi a internetovými organizacemi z celého světa, jako jsou Mozilla, Cisco, Chrome , Akamai atd.
Předpoklad:
- Operační systém s CentOS Linux
- Adresa IPv4 serveru s oprávněními superuživatele (přístup root)
- Gnome Terminal pro Linux Desktop
- Klient PuTTy SSH pro Windows nebo macOS
- Powershell pro Windows 10/11
- Znáte příkazy DNF
Zabezpečte Nginx pomocí Let’s Encrypt na CentOS
Krok 1. První příkaz aktualizuje seznamy balíčků, aby bylo zajištěno, že získáte nejnovější verzi a závislosti.
sudo dnf install epel-release sudo dnf update sudo dnf install mod_ssl openssl
Před instalací Let’s Encrypt SSL doména by měla být dobře přístupná a měla by používat virtuální hostitele Nginx. Přečtěte si návod, jak nainstalovat Nginx na CentOS 8.
Krok 2. Nainstalujte Certbot.
Balík certbot není součástí standardních úložišť CentOS 8, ale lze jej stáhnout z webu dodavatele:
sudo wget -P /usr/local/bin https://dl.eff.org/certbot-auto sudo chmod +x /usr/local/bin/certbot-auto
Dále vygenerujte novou sadu 2048bitových parametrů DH pomocí následujícího příkazu:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
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 adresář ${webroot-path}/.well-known/acme-challenge:
sudo mkdir -p /var/lib/letsencrypt/.well-known sudo chgrp nginx /var/lib/letsencrypt sudo 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
$ nano /etc/nginx/snippets/letsencrypt.conf location ^~ /.well-known/acme-challenge/ { allow all; root /var/lib/letsencrypt/; default_type "text/plain"; try_files $uri =404; }
$ nano /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;
Jakmile budou úryvky vytvořeny, otevřete blok doménového serveru a vložte úryvek letsencrypt.conf, jak je znázorněno níže:
$ nano /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
Potom spusťte tento příkaz, abyste získali certifikát a nechali Certbot automaticky upravit vaši konfiguraci Nginx, aby ji poskytoval, a zapněte přístup HTTPS v jediném kroku:
sudo /usr/local/bin/certbot-auto certonly --agree-tos --email [email protected] --webroot -w /var/lib/letsencrypt/ -d your-domain.com -d www.your-domain.com
Nakonec upravte blok svého doménového serveru následovně:
$ nano /etc/nginx/conf.d/example.com.conf server { listen 80; server_name www.your-domain.com your-domain.com; include snippets/letsencrypt.conf; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name www.your-domain.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 }
Znovu načtěte službu Nginx, aby se změny projevily:
sudo systemctl reload nginx
Krok 4. Kontrola stavu certifikátu.
Můžete se ujistit, že Certbot vytvořil váš certifikát SSL správně, pomocí testu serveru SSL od společnosti Qualys pro zabezpečení cloudu. Otevřete následující odkaz ve svém preferovaném webovém prohlížeči a nahraďte your-domain.com
s vaší základní doménou:
https://www.ssllabs.com/ssltest/analyze.html?d=your-domain.com
Blahopřejeme, naučili jste se zabezpečit Nginx pomocí let’s encrypt na CentOS 8. Pokud máte nějaké dotazy, zanechte prosím komentář níže.