[#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 Encrypt
- 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 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.
Wymagania wstępne
Przed kontynuowaniem tego samouczka upewnij się, że spełnione są następujące warunki wstępne:
- Zalogowany jako użytkownik sudo. Posiadaj nazwę domeny wskazującą adres IP twojego serwera publicznego. Skorzystamy z
example.comZainstaluj 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 Debiana.
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.
Zamierzamy zamapować wszystkie żądania HTTP dotyczące
.well-known/acme-challenge
do jednego 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ędą zawarte 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 zakończeniu otwórz plik bloku 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; }
Włącz nowy blok serwera, tworząc symboliczne łącze do katalogu z
sites-enabled
:
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, na terminalu zostanie wydrukowana następująca wiadomość:
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:
Następnie edytuj 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:
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 odnawia dowolny certyfikat 30 dni przed jego wygaśnięciem.
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"
Przetestuj proces automatycznego odnawiania, uruchamiając następujące polecenie:
sudo certbot renew --dry-run
Jeśli nie ma błędów, oznacza to, że proces odnowienia zakończył się powodzeniem.
Wniosek
Posiadanie certyfikatu SSL jest obecnie obowiązkowe. Zabezpiecza twoją stronę, zwiększa pozycję w rankingu SERP i pozwala włączyć HTTP / 2 na twoim serwerze internetowym.
W tym samouczku użyłeś klienta Let's Encrypt, certbot, aby wygenerować 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 debian zaszyfrujmy certbot sslTen post jest częścią How to Install LEMP Stack na Debian 9 series.
Inne posty z tej serii:
• Jak zainstalować MariaDB na Ubuntu 18.04 • Jak zainstalować Nginx na Debian 9 • Jak zainstalować PHP na Debian 9 • Jak skonfigurować bloki serwera Nginx na Debian 9 • Zabezpiecz Nginx za pomocą Let's Encrypt na Debian 9Zabezpiecz 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 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
Zabezpiecz nginx za pomocą Let's Encrypt na Ubuntu 16.04
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







