Android

Zabezpiecz nginx za pomocą Let's Encrypt na Centos 8

[#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, 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 przedstawimy instrukcje krok po kroku, jak zainstalować bezpłatny certyfikat Let's Encrypt SSL na CentOS 8 z uruchomionym Nginx 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 upewnij się, że zostały spełnione następujące wymagania wstępne:

  • Masz nazwę domeny wskazującą twój publiczny adres IP. Użyjemy example.com . Masz Nginx zainstalowany na serwerze CentOS. Twoja zapora sieciowa jest skonfigurowana do przyjmowania połączeń na portach 80 i 443.

Instalowanie Certbota

Certbot to bezpłatne narzędzie wiersza polecenia, które upraszcza proces uzyskiwania i odnawiania certyfikatów Let's Encrypt SSL oraz automatycznego włączania HTTPS na serwerze.

Pakiet certbot nie znajduje się w standardowych repozytoriach CentOS 8, ale można go pobrać ze strony internetowej dostawcy.

Uruchom następującą komendę wget jako użytkownik root lub sudo, aby pobrać skrypt certbot do katalogu /usr/local/bin :

sudo wget -P /usr/local/bin

Po zakończeniu pobierania uczyń plik wykonywalnym:

sudo chmod +x /usr/local/bin/certbot-auto

Generowanie grupy 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, wpisując następujące polecenie:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Uzyskanie certyfikatu Let's Encrypt SSL

Aby uzyskać certyfikat SSL dla 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.

sudo mkdir -p /var/lib/letsencrypt/.well-known sudo chgrp nginx /var/lib/letsencrypt sudo chmod g+s /var/lib/letsencrypt

Aby uniknąć powielania kodu, utwórz następujące dwa fragmenty, które będą zawarte we wszystkich plikach blokowych serwera Nginx:

sudo mkdir /etc/nginx/snippets /etc/nginx/snippets/letsencrypt.conf

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: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;

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:

/etc/nginx/conf.d/example.com.conf

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

Załaduj ponownie konfigurację Nginx, aby zmiany odniosły skutek:

sudo systemctl reload nginx

Uruchom narzędzie certbot z wtyczką webroot, aby uzyskać pliki certyfikatów SSL dla swojej domeny:

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

Jeśli po raz pierwszy certbot , narzędzie zainstaluje brakujące zależności.

Po pomyślnym uzyskaniu certyfikatu SSL 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 2020-03-12. To obtain a new or tweaked version of this certificate in the future, simply run certbot-auto again. To non-interactively renew *all* of your certificates, run "certbot-auto 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 masz pliki certyfikatów, możesz edytować blok serwera domeny w następujący sposób:

/etc/nginx/conf.d/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 www do wersji innej niż www.

Na koniec ponownie załaduj usługę Nginx, aby zmiany odniosły skutek:

sudo systemctl reload nginx

Teraz 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 wygaśnięciem, utwórz cronjob, który będzie działał dwa razy dziennie i automatycznie odnawiaj dowolny certyfikat 30 dni przed datą wygaśnięcia.

Użyj polecenia crontab aby utworzyć nową pracę z cronjob:

sudo crontab -e

Wklej następujący wiersz:

0 */12 * * * root test -x /usr/local/bin/certbot-auto -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && /usr/local/bin/certbot-auto -q renew --renew-hook "systemctl reload nginx"

Zapisz i zamknij plik.

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

sudo certbot renew --dry-run

Jeśli nie ma błędów, oznacza to, że proces odnawiania testu powiódł się.

Wniosek

W tym samouczku pokazaliśmy, jak korzystać z klienta Let's Encrypt, certbot, aby pobrać certyfikaty SSL dla swojej domeny. Stworzyliśmy również fragmenty Nginx, aby uniknąć powielania kodu, i skonfigurowaliśmy Nginx do korzystania z certyfikatów. Pod koniec samouczka utworzyliśmy cronjob do automatycznego odnawiania certyfikatów.

Aby dowiedzieć się więcej o Certbot, odwiedź ich stronę dokumentacji.

nginx centos zaszyfrujmy certbot ssl