Android

Zabezpiecz apache za pomocą szyfrowania na centos 8

Instalacja Apache (Linux Ubuntnu), konfiguracja wirtualnych serwerów po adresie ip.

Instalacja Apache (Linux Ubuntnu), konfiguracja wirtualnych serwerów po adresie ip.

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 wyjaśniono, jak zainstalować bezpłatny certyfikat Let's Encrypt SSL na CentOS 8 z uruchomionym Apache jako serwerem WWW. Użyjemy narzędzia certbot do uzyskania i odnowienia certyfikatów.

Wymagania wstępne

Przed kontynuowaniem upewnij się, że spełnione są następujące warunki wstępne:

  • Niech nazwa domeny wskazuje adres IP twojego publicznego serwera. Użyjemy example.com Apache jest zainstalowany i działa na twoim serwerze z wirtualnym hostem skonfigurowanym dla twojej domeny. Porty 80 i 443 są otwarte w twojej zaporze ogniowej.

Zainstaluj następujące pakiety, które są wymagane dla serwera WWW z szyfrowaniem SSL:

sudo dnf install mod_ssl openssl

Po zainstalowaniu pakietu mod_ssl powinien utworzyć samopodpisany plik klucza i certyfikatu dla hosta lokalnego. Jeśli pliki nie zostaną utworzone automatycznie, możesz je utworzyć za pomocą polecenia openssl :

sudo openssl req -newkey rsa:4096 -x509 -sha256 -days 3650 -nodes \ -out /etc/pki/tls/certs/localhost.crt \ -keyout /etc/pki/tls/private/localhost.key

Zainstaluj Certbot

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

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

Możesz zmienić rozmiar do 4096 bitów, ale generowanie może potrwać ponad 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, 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 uprościć konfigurację, .well-known/acme-challenge 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 Apache.

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

Aby uniknąć powielania kodu i ułatwić konfigurację, utwórz następujące dwa fragmenty konfiguracji:

/etc/httpd/conf.d/letsencrypt.conf

Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/" AllowOverride None Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec Require method GET POST OPTIONS Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/" AllowOverride None Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec Require method GET POST OPTIONS /etc/httpd/conf.d/ssl-params.conf

SSLCipherSuite EECDH+AESGCM:EDH+AESGCM # Requires Apache 2.4.36 & OpenSSL 1.1.1 SSLProtocol -all +TLSv1.3 +TLSv1.2 SSLOpenSSLConfCmd Curves X25519:secp521r1:secp384r1:prime256v1 # Older versions # SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 SSLHonorCipherOrder On Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" Header always set X-Frame-Options DENY Header always set X-Content-Type-Options nosniff # Requires Apache >= 2.4 SSLCompression off SSLUseStapling on SSLStaplingCache "shmcb:logs/stapling-cache(150000)" # Requires Apache >= 2.4.11 SSLSessionTickets Off SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem"

Powyższy fragment korzysta z rębaków zalecanych przez Cipherli.st. Umożliwia zszywanie OCSP, HTTP Strict Transport Security (HSTS), klucz Dh i wymusza kilka skoncentrowanych na bezpieczeństwie nagłówków

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

sudo systemctl reload

Teraz możesz uruchomić skrypt certbot z wtyczką webroot i pobrać pliki certyfikatów SSL:

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

Po pomyślnym zakończeniu 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-01-26. 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" - 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:

Teraz, gdy wszystko jest już skonfigurowane, edytuj konfigurację wirtualnego hosta domeny w następujący sposób:

/etc/httpd/conf.d/example.com.conf

ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ ServerName example.com ServerAlias www.example.com Protocols h2 http:/1.1 Redirect permanent / https://example.com/ DocumentRoot /var/www/example.com/public_html ErrorLog /var/log/httpd/example.com-error.log CustomLog /var/log/httpd/example.com-access.log combined SSLEngine On SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem # Other Apache Configuration ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ ServerName example.com ServerAlias www.example.com Protocols h2 http:/1.1 Redirect permanent / https://example.com/ DocumentRoot /var/www/example.com/public_html ErrorLog /var/log/httpd/example.com-error.log CustomLog /var/log/httpd/example.com-access.log combined SSLEngine On SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem # Other Apache Configuration ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ ServerName example.com ServerAlias www.example.com Protocols h2 http:/1.1 Redirect permanent / https://example.com/ DocumentRoot /var/www/example.com/public_html ErrorLog /var/log/httpd/example.com-error.log CustomLog /var/log/httpd/example.com-access.log combined SSLEngine On SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem # Other Apache Configuration ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ ServerName example.com ServerAlias www.example.com Protocols h2 http:/1.1 Redirect permanent / https://example.com/ DocumentRoot /var/www/example.com/public_html ErrorLog /var/log/httpd/example.com-error.log CustomLog /var/log/httpd/example.com-access.log combined SSLEngine On SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem # Other Apache Configuration

Powyższa konfiguracja wymusza HTTPS i przekierowuje ze strony www do wersji innej niż www. Umożliwia także HTTP / 2, dzięki czemu Twoje witryny będą szybsze i bardziej niezawodne. Możesz dostosować konfigurację do swoich potrzeb.

Uruchom ponownie usługę Apache:

sudo systemctl restart

Możesz teraz otworzyć 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, utworzymy cronjob, który będzie działał dwa razy dziennie i automatycznie odnowi każdy certyfikat 30 dni przed datą jego wygaśnięcia.

Uruchom następującą komendę, aby utworzyć nową współpracę, która odnowi certyfikat i zrestartuje Apache:

echo "0 0, 12 * * * root python3 -c 'import random; import time; time.sleep(random.random() * 3600)' && /usr/local/bin/certbot-auto -q renew --renew-hook \"systemctl reload httpd\"" | sudo tee -a /etc/crontab > /dev/null

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

sudo /usr/local/bin/certbot-auto renew --dry-run

Jeśli nie ma błędów, oznacza to, że proces odnowienia zakończył się powodzeniem.

Wniosek

W tym samouczku rozmawialiśmy o tym, jak używać certyfikatu klienckiego Let's Encrypt w CentOS, aby uzyskać certyfikaty SSL dla swoich domen. Pokazałeś także, jak skonfigurować Apache do korzystania z certyfikatów i skonfigurować cronjob do automatycznego odnawiania certyfikatów.

Aby dowiedzieć się więcej o skrypcie Certbot, odwiedź dokumentację Certbot.

apache centos zaszyfrujmy certbot ssl