[#138] NGINX jako podstawowy serwer WWW dla usługi hostingowej - Maciej Kupiec
Spisu treści:
- Wymagania wstępne
- Instalowanie Certbota
- Generowanie grupy Strong 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 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:
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 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







