[#138] NGINX jako podstawowy serwer WWW dla usługi hostingowej - Maciej Kupiec
Spisu treści:
- Wymagania wstępne
- Zainstaluj Certbot
- Wygeneruj grupę Strong Dh (Diffie-Hellman)
- Uzyskanie certyfikatu Let's Encrypt SSL
- Automatyczne odnawianie certyfikatu SSL
- Wniosek
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, w jaki sposób zabezpieczyć twój Nginx za pomocą Let's Encrypt za pomocą narzędzia certbot na Ubuntu 16.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 użyjemy
example.com. Masz zainstalowanego Nginx, postępując zgodnie z instrukcją instalacji Nginx na Ubuntu 16.04.
Zainstaluj Certbot
Certbot to narzędzie napisane w języku Python, które może zautomatyzować zadania związane z uzyskiwaniem i odnawianiem certyfikatów Let's Encrypt SSL oraz konfigurowaniem serwerów sieciowych.
Najpierw zainstaluj
software-properties-common
pakiet
software-properties-common
który zapewnia narzędzie
add-apt-repository
potrzebne do dodania dodatkowych PPA.
Zaktualizuj indeks pakietów i zainstaluj
software-properties-common
z:
sudo apt update
sudo apt install software-properties-common
Po zakończeniu instalacji dodaj repozytorium PPA certbot do swojego systemu za pomocą następującego polecenia:
sudo add-apt-repository ppa:certbot/certbot
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. Wygeneruj 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.
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;
Powyższy fragment zawiera chipsety zalecane przez Mozillę, włącza zszywanie OCSP, HTTP Strict Transport Security (HSTS) i wymusza kilka nagłówków HTTP zorientowanych na bezpieczeństwo.
Po utworzeniu fragmentów otwórz blok serwera domeny i
letsencrypt.conf
fragment
letsencrypt.conf
jak pokazano poniżej:
server { listen 80; server_name example.com www.example.com; include snippets/letsencrypt.conf; }
Aktywuj blok serwera, tworząc symboliczne łącze z
sites-available
do
sites-enabled
:
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/example.com.conf
Załaduj ponownie konfigurację Nginx, aby zmiany odniosły skutek:
sudo systemctl reload nginx
Uruchom skrypt certbot z wtyczką webroot i uzyskaj pliki certyfikatów SSL:
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-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:
Teraz, gdy mamy pliki certyfikatów, edytuj blok serwera domeny w następujący sposób:
/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 }
W powyższej konfiguracji wymuszamy HTTPS i przekierowujemy wersję
www
domeny do wersji
non www
.
Ponownie załaduj usługę Nginx, aby zmiany odniosły skutek:
Automatyczne odnawianie certyfikatu SSL
Certyfikaty Let's Encrypt są ważne przez 90 dni. Aby automatycznie odnowić certyfikaty przed wygaśnięciem, pakiet certbot tworzy cronjob, który będzie działał dwa razy dziennie i automatycznie odnowi dowolny 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. Aby to zrobić,
--renew-hook "systemctl reload nginx"
do pliku
/etc/cron.d/certbot
, tak jak to wygląda:
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, użyj 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 uzyskać 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 sslZabezpiecz nginx za pomocą Let's Encrypt na Centos 7
W tym samouczku przedstawimy instrukcje krok po kroku, jak zabezpieczyć twój Nginx za pomocą Let's Encrypt za pomocą narzędzia certbot na CentOS 7
Zabezpiecz nginx za pomocą Let's Encrypt na Debian 9
W tym samouczku wyjaśnimy, jak korzystać z narzędzia Certbot, aby uzyskać bezpłatny certyfikat SSL dla Nginx na Debianie 9. Pokażemy również, jak skonfigurować Nginx do korzystania z certyfikatu SSL i włączyć HTTP / 2.
Zabezpiecz nginx za pomocą Let's Encrypt na Ubuntu 18.04
Let's Encrypt to bezpłatny i otwarty ośrodek certyfikacji opracowany przez Internet Security Research Group. W tym samouczku przedstawimy instrukcje krok po kroku, w jaki sposób zabezpieczyć twój Nginx za pomocą Let's Encrypt za pomocą narzędzia certbot na Ubuntu 18.04







