Android

Zabezpiecz nginx za pomocą Let's Encrypt na Ubuntu 18.04

[#138] NGINX jako podstawowy serwer WWW dla usługi hostingowej - Maciej Kupiec

[#138] NGINX jako podstawowy serwer WWW dla usługi hostingowej - Maciej Kupiec

Spisu treści:

Anonim

Let's Encrypt to bezpłatny i otwarty ośrodek certyfikacji opracowany przez Internet Security Research Group (ISRG). Certyfikaty wydawane przez Let's Encrypt są dziś zaufane przez prawie wszystkie przeglądarki.

W tym samouczku przedstawimy instrukcje krok po kroku, jak zabezpieczyć twój Nginx za pomocą Let's Encrypt za pomocą narzędzia certbot na Ubuntu 18.04.

Wymagania wstępne

Przed kontynuowaniem tego samouczka upewnij się, że zostały spełnione następujące wymagania wstępne:

  • Masz nazwę domeny wskazującą adres IP twojego publicznego serwera. W tym samouczku wykorzystamy example.com . Masz zainstalowanego Nginx postępując zgodnie z tymi instrukcjami Masz blok serwera dla swojej domeny. Możesz postępować zgodnie z tymi instrukcjami, aby dowiedzieć się, jak je utworzyć.

Zainstaluj Certbot

Certbot to w pełni funkcjonalne i łatwe w użyciu narzędzie, które może zautomatyzować zadania związane z uzyskiwaniem i odnawianiem certyfikatów Let's Encrypt SSL oraz konfigurowaniem serwerów internetowych do korzystania z certyfikatów. Pakiet certbot znajduje się w domyślnych repozytoriach Ubuntu.

Zaktualizuj listę pakietów i zainstaluj pakiet certbot:

sudo apt update sudo apt install certbot

Wygeneruj grupę Strong Dh (Diffie-Hellman)

Wymiana kluczy Diffie – Hellmana (DH) to metoda bezpiecznej wymiany kluczy kryptograficznych przez niezabezpieczony kanał komunikacyjny. Wygenerujemy nowy zestaw 2048-bitowych parametrów DH w celu zwiększenia bezpieczeństwa:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 Jeśli chcesz, możesz zmienić rozmiar do 4096 bitów, ale w takim przypadku generowanie może potrwać dłużej niż 30 minut, w zależności od entropii systemu.

Uzyskanie certyfikatu Let's Encrypt SSL

Aby uzyskać certyfikat SSL dla naszej domeny, użyjemy wtyczki Webroot, która działa, tworząc tymczasowy plik do sprawdzania poprawności żądanej domeny w katalogu ${webroot-path}/.well-known/acme-challenge . Serwer Let's Encrypt wysyła żądania HTTP do pliku tymczasowego w celu sprawdzenia, czy żądana domena rozpoznaje serwer, na którym działa certbot.

Aby to .well-known/acme-challenge wszystkie żądania HTTP dotyczące .well-known/acme-challenge do pojedynczego katalogu /var/lib/letsencrypt .

Poniższe polecenia utworzą katalog i umożliwią zapisywanie go na serwerze Nginx.

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

Aby uniknąć powielania kodu, utwórz następujące dwa fragmenty, które będziemy uwzględniać we wszystkich naszych plikach blokowych serwera Nginx.

Otwórz edytor tekstu i utwórz pierwszy fragment, 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; }

Utwórz drugi fragment ssl.conf który zawiera ssl.conf zalecane przez Mozillę, włącza zszywanie OCSP, HTTP Strict Transport Security (HSTS) i wymusza kilka nagłówków HTTP zorientowanych na bezpieczeństwo.

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 utworzeniu fragmentów otwórz blok serwera domeny i letsencrypt.conf fragment letsencrypt.conf jak pokazano poniżej:

sudo nano /etc/nginx/sites-available/example.com /etc/nginx/sites-available/example.com

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

Aby włączyć nowy plik bloku serwera, musimy utworzyć dowiązanie symboliczne z pliku do katalogu z sites-enabled , który jest odczytywany przez Nginx podczas uruchamiania:

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

Uruchom ponownie usługę Nginx, aby zmiany odniosły skutek:

sudo systemctl restart nginx

Możesz teraz uruchomić Certbot z wtyczką webroot i uzyskać pliki certyfikatów SSL, wydając:

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

Jeśli certyfikat SSL zostanie pomyślnie uzyskany, certbot wydrukuje następujący komunikat:

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:

Teraz, gdy masz pliki certyfikatów, możesz edytować blok serwera domeny w następujący sposób:

sudo nano /etc/nginx/sites-available/example.com /etc/nginx/sites-available/example.com

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 }

W powyższej konfiguracji wymuszamy HTTPS i przekierowujemy z wersji www na wersję inną niż www.

Ponownie załaduj usługę Nginx, aby zmiany odniosły skutek:

sudo systemctl reload nginx

Automatyczne odnawianie certyfikatu SSL Encrypt

Certyfikaty Let's Encrypt są ważne przez 90 dni. Aby automatycznie odnowić certyfikaty przed ich wygaśnięciem, pakiet certbot tworzy cronjob, który działa dwa razy dziennie i automatycznie odnowi każdy certyfikat 30 dni przed upływem jego ważności.

Ponieważ korzystamy z wtyczki webroot certbot po odnowieniu certyfikatu, musimy również ponownie załadować usługę nginx. Dołącz --renew-hook "systemctl reload nginx" do pliku /etc/cron.d/certbot , tak jak to wygląda:

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"

Aby przetestować proces odnawiania, możesz użyć przełącznika certbot --dry --dry-run :

sudo certbot renew --dry-run

Jeśli nie ma błędów, oznacza to, że proces odnowienia zakończył się powodzeniem.

Wniosek

W tym samouczku użyłeś klienta Let's Encrypt, certbot, aby pobrać certyfikaty SSL dla swojej domeny. Utworzyłeś również fragmenty Nginx, aby uniknąć powielania kodu, i skonfigurowałeś Nginx do używania certyfikatów. Na koniec samouczka skonfigurowałeś cronjob do automatycznego odnawiania certyfikatu.

nginx ubuntu zaszyfrujmy certbot ssl

Ten post jest częścią serii How-to-Install-Lemp-Stack-On-Ubuntu-18-04.

Inne posty z tej serii:

• Jak zainstalować Nginx na Ubuntu 18.04 • Jak skonfigurować bloki serwera Nginx na Ubuntu 18.04 • Zabezpiecz Nginx za pomocą Let's Encrypt na Ubuntu 18.04 • Jak zainstalować MySQL na Ubuntu 18.04 • Jak zainstalować PHP na Ubuntu 18.04