[#138] NGINX jako podstawowy serwer WWW dla usługi hostingowej - Maciej Kupiec
Spisu treści:
- Wymagania wstępne
- Instalowanie Certbota
- Generowanie grupy Dh (Diffie-Hellman)
- Uzyskanie certyfikatu Let's Encrypt SSL
- Automatyczne odnawianie certyfikatu SSL Encrypt
- Wniosek
Let's Encrypt to bezpłatny, zautomatyzowany i otwarty ośrodek certyfikacji opracowany przez Internet Security Research Group (ISRG), który zapewnia bezpłatne certyfikaty SSL.
Certyfikaty wydawane przez Let's Encrypt są zaufane przez wszystkie główne przeglądarki i są ważne przez 90 dni od daty wystawienia.
W tym samouczku pokazano, jak zainstalować bezpłatny certyfikat Let's Encrypt SSL na Debian 10, Buster z Nginxem jako serwerem internetowym. Pokażemy także, jak skonfigurować Nginx do korzystania z certyfikatu SSL i włączyć HTTP / 2.
Wymagania wstępne
Przed kontynuowaniem przewodnika upewnij się, że spełnione są następujące warunki wstępne:
- Zalogowany jako użytkownik root lub użytkownik z uprawnieniami sudo. Domena, dla której chcesz uzyskać certyfikat SSL, musi wskazywać adres IP twojego serwera publicznego. Użyjemy
example.com.Nginx zainstalowany.
Instalowanie Certbota
Użyjemy narzędzia certbot do uzyskania i odnowienia certyfikatów.
Certbot to w pełni funkcjonalne i łatwe w użyciu narzędzie, które automatyzuje 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. Uruchom następujące polecenia, aby zainstalować certbota:
sudo apt update
sudo apt install certbot
Generowanie grupy 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
Możesz także zmienić rozmiar do 4096 bitów, ale 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 domeny, użyjemy wtyczki Webroot. 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
.
Uruchom następujące polecenia, aby utworzyć 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, utworzymy dwa fragmenty, które zostaną uwzględnione we wszystkich 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; }
Drugi fragment
ssl.conf
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.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;
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; }
Utwórz dowiązanie symboliczne do katalogu
sites-enabled
aby włączyć blok serwera domeny:
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
Teraz możesz uzyskać pliki certyfikatu SSL, uruchamiając następujące polecenie:
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: 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 2020-02-22. 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:
Zmodyfikuj blok serwera domeny i dołącz pliki certyfikatów SSL 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 }
Powyższa konfiguracja nakazuje Nginx przekierowanie z HTTP na HTTPS i z www na wersję inną niż www.
Uruchom ponownie lub ponownie załaduj usługę Nginx, aby zmiany odniosły skutek:
sudo systemctl restart nginx
Otwórz witrynę za pomocą
https://
, a zobaczysz zieloną ikonę kłódki.

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 każdy certyfikat 30 dni przed upływem jego ważności.
Po odnowieniu usługa nginx musi zostać ponownie załadowana, aby serwer mógł załadować certyfikat. 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 pokazaliśmy, jak generować i odnawiać certyfikaty SSL za pomocą skryptu certbot. Pokazaliśmy również, jak skonfigurować Nginx do korzystania z certyfikatów.
Aby dowiedzieć się więcej o Certbot, odwiedź dokumentację Certbot.
nginx debian 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







