Wyszukiwanie w witrynie

Jak zabezpieczyć Apache za pomocą SSL i Let’s Encrypt we FreeBSD


W tym samouczku dowiemy się, jak zabezpieczyć serwer Apache HTTP za pomocą certyfikatów TLS/SSL oferowanych przez Let's Encrypt w FreeBSD 11. x. Omówimy również, jak zautomatyzować proces odnawiania certyfikatu dla Lets’ Encrypt.

Przeczytaj także: Zainstaluj Let’s Encrypt dla Nginx na FreeBSD

Certyfikaty TLS/SSL są wykorzystywane przez serwer WWW Apache do szyfrowania komunikacji pomiędzy węzłami końcowymi, lub bardziej zwyczajnie pomiędzy serwerem a klientem w celu zapewnienia bezpieczeństwa. Let's Encrypt udostępnia narzędzie wiersza poleceń certbot, czyli aplikację, która może ułatwić bezpłatne uzyskiwanie zaufanych certyfikatów.

Wymagania:

  1. Instalacja FreeBSD 11.x
  2. 10 rzeczy do zrobienia po instalacji FreeBSD
  3. Jak zainstalować Apache, MariaDB i PHP we FreeBSD

Krok 1: Skonfiguruj Apache SSL na FreeBSD

1. Przed rozpoczęciem instalacji narzędzia certbot i utworzeniem pliku konfiguracyjnego TSL dla Apache utwórz najpierw dwa odrębne katalogi o nazwach sites-available i sites-enabled w głównym katalogu konfiguracyjnym Apache, wydając poniższe polecenia.

Celem tych dwóch katalogów jest ułatwienie zarządzania konfiguracją hostingu wirtualnego w systemie, bez konieczności modyfikowania głównego pliku konfiguracyjnego Apache httpd.conf za każdym razem, gdy dodajemy nowy host wirtualny.

mkdir /usr/local/etc/apache24/sites-available
mkdir /usr/local/etc/apache24/sites-enabled

2. Po utworzeniu obu katalogów otwórz plik Apache httpd.conf za pomocą edytora tekstu i dodaj następujący wiersz na końcu pliku, jak pokazano poniżej.

nano /usr/local/etc/apache24/httpd.conf

Dodaj następujący wiersz:

IncludeOptional etc/apache24/sites-enabled/*.conf

3. Następnie włącz moduł TLS dla Apache, tworząc nowy plik o nazwie 020_mod_ssl.conf w modules.d< katalog z następującą zawartością.

nano /usr/local/etc/apache24/modules.d/020_mod_ssl.conf

Dodaj następujące linie do pliku 020_mod_ssl.conf.

Listen 443
SSLProtocol ALL -SSLv2 -SSLv3
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
SSLPassPhraseDialog  builtin
SSLSessionCacheTimeout  300

4. Teraz odkomentuj moduł SSL z pliku /usr/local/etc/apache24/httpd.conf, usuwając hashtag z początku następującego wiersza, jak pokazano poniżej:

LoadModule ssl_module libexec/apache24/mod_ssl.so

5. Następnie utwórz plik konfiguracyjny TLS dla swojej domeny w katalogu dostępne witryny, najlepiej z nazwą swojej domeny, jak pokazano w poniższy fragment:

nano /usr/local/etc/apache24/sites-available/bsd.lan-ssl.conf

Dodaj następującą konfigurację wirtualnego hosta do pliku bsd.lan-ssl.conf.

<VirtualHost *:443>
    ServerName www.yourdomain.com
	ServerAlias yourdomain.com
                DocumentRoot "/usr/local/www/apache24/data/"
	SSLEngine on

	SSLCertificateFile "/usr/local/etc/letsencrypt/live/www.yourdomain.com/cert.pem"
	SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/www.yourdomain.com/privkey.pem"
	SSLCertificateChainFile "/usr/local/etc/letsencrypt/live/www.yourdomain.com/fullchain.pem"

<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
</FilesMatch>

<Directory "/usr/local/www/apache24/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>

	BrowserMatch "MSIE [2-5]" \
        nokeepalive ssl-unclean-shutdown \
        downgrade-1.0 force-response-1.0

	CustomLog "/var/log/apache/httpd-ssl_request.log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

	<Directory "/usr/local/www/apache24/data/">
            Options Indexes FollowSymLinks MultiViews
        #AllowOverride controls what directives may be placed in .htaccess files.       
                        AllowOverride All
        #Controls who can get stuff from this server file
                        Require all granted
        </Directory>
       
    ErrorLog "/var/log/apache/yourdomain.ssl-error.log"
    CustomLog "/var/log/apache/yourdomain.ssl-access_log" combined

</VirtualHost>

Pamiętaj, aby odpowiednio zastąpić zmienną nazwy domeny z instrukcji ServerName, ServerAlias, ErrorLog, CustomLog.

Krok 2: Zainstaluj Lets’Encrypt na FreeBSD

6. W kolejnym kroku wydaj poniższe polecenie, aby zainstalować narzędzie certbot dostarczane przez firmę Let's Encrypt, które posłuży do uzyskania Apache TSL bezpłatne certyfikaty dla Twojej domeny.

Podczas instalowania certbota na ekranie zostanie wyświetlona seria monitów. Użyj poniższego zrzutu ekranu, aby skonfigurować narzędzie certbot. Ponadto kompilacja i instalacja narzędzia certbot może zająć trochę czasu, w zależności od zasobów komputera.

cd /usr/ports/security/py-certbot
make install clean

7. Po zakończeniu procesu kompilacji wydaj poniższe polecenie, aby zaktualizować narzędzie certbot i wymagane zależności certbot.

pkg install py27-certbot
pkg install py27-acme

8. Aby wygenerować certyfikat dla swojej domeny, wydaj polecenie jak pokazano poniżej. Upewnij się, że podałeś poprawną lokalizację webroot, w której przechowywane są pliki Twojej witryny w systemie plików (dyrektywa DocumentRoot z pliku konfiguracyjnego domeny) za pomocą flagi -w. Jeśli masz wiele subdomen, dodaj je wszystkie z flagą -d.

certbot certonly --webroot -w /usr/local/www/apache24/data/ -d yourdomain.com -d www.yourdomain.com

Podczas uzyskiwania certyfikatu podaj adres e-mail w celu odnowienia certyfikatu, naciśnij a, aby zaakceptować warunki Let’s Encrypt i n, aby nie udostępniać adresu e-mail partnerom Let’s Encrypt.

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):[email 
There seem to be problems with that address. Enter email address (used for
urgent renewal and security notices)  If you really want to skip this, you can
run the client with --register-unsafely-without-email but make sure you then
backup your account key from /etc/letsencrypt/accounts   (Enter 'c' to cancel):[email 

-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: a ------------------------------------------------------------------------------- Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about EFF and our work to encrypt the web, protect its users and defend digital rights. ------------------------------------------------------------------------------- (Y)es/(N)o: n Obtaining a new certificate Performing the following challenges: http-01 challenge for www.domain.com Using the webroot path /usr/local/www/apache24/data for all unmatched domains. Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /usr/local/etc/letsencrypt/live/www.yourdomain.com/fullchain.pem. Your cert will expire on 2017-11-15. 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 /usr/local/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: https://eff.org/donate-le

9. Po uzyskaniu certyfikatów dla swojej domeny możesz uruchomić polecenie ls, aby wyświetlić listę wszystkich komponentów certyfikatu (łańcuch, klucz prywatny, certyfikat), jak pokazano w poniższym przykładzie.

ls -al /usr/local/etc/letsencrypt/live/www.yourdomain.com/

Krok 3: Zaktualizuj certyfikaty Apache TLS na FreeBSD

10. Aby dodać certyfikaty Let’s Encrypt do swojej witryny, otwórz plik konfiguracyjny Apache dla swojej domeny i zaktualizuj poniższe linie, aby odzwierciedlały ścieżkę wystawionych certyfikatów.

nano /usr/local/etc/apache24/sites-available/bsd.lan-ssl.conf

Dodaj te linie certyfikatu TLS:

SSLCertificateFile "/usr/local/etc/letsencrypt/live/www.yourdomain.com/cert.pem"
	SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/www.yourdomain.com/privkey.pem"
	SSLCertificateChainFile "/usr/local/etc/letsencrypt/live/www.yourdomain.com/fullchain.pem"

11. Na koniec włącz plik konfiguracyjny TLS, tworząc dowiązanie symboliczne dla pliku konfiguracyjnego TLS domeny do katalogu obsługiwane witryny, sprawdź konfiguracje Apache pod kątem możliwych błędów składniowych i, jeśli składnia jest OK, zrestartuj demona Apache, wydając poniższe polecenia.

ln -sf /usr/local/etc/apache24/sites-available/bsd.lan-ssl.conf /usr/local/etc/apache24/sites-enabled/
apachectl -t
service apache24 restart

12. Aby sprawdzić, czy usługa Apache nasłuchuje na porcie HTTPS 443, wydaj następujące polecenie, aby wyświetlić listę gniazd sieciowych httpd.

sockstat -4 | grep httpd

13. Możesz przejść do adresu swojej domeny z przeglądarki za pośrednictwem protokołu HTTPS, aby potwierdzić, że certyfikaty Let's Encrypt zostały pomyślnie zastosowane.

https://www.yourdomain.com

14. Aby uzyskać dodatkowe informacje o wystawionym certyfikacie Let's Encrypt z wiersza poleceń, użyj polecenia openssl w następujący sposób.

openssl s_client -connect www.yourdomain.com:443

15. Możesz także sprawdzić, czy ruch jest szyfrowany za pomocą ważnego certyfikatu dostarczonego przez Let's Encrypt CA z urządzenia mobilnego, jak pokazano na poniższym zrzucie ekranu urządzenia mobilnego.

To wszystko! Klienci mogą teraz bezpiecznie odwiedzać Twoją witrynę, ponieważ ruch przepływający pomiędzy serwerem a przeglądarką klienta jest szyfrowany. Aby uzyskać bardziej złożone zadania dotyczące narzędzia certbot, odwiedź poniższy link: https://certbot.eff.org/