27 kwi

Zabezpieczenie Apache certyfikatem Let’s Encrypt dla systemu Ubuntu 16.04

Wprowadzenie

Niżej pokażemy Ci jak skonfigurować certyfikat TLS/SSL z Let’s Encrypt na serwerze Ubuntu 16.04 wykorzystując Apache w jakości serwera HTTP. Zaprezentujemy też, jak zautomatyzować proces odnowienia certyfikatu przy pomocy cron`a.

Zapewnianie dodatkowego bezpieczeństwa dla korzystających z aplikacji użytkowników jest możliwie poprzez szyfrowanie przesyłanych danych pomiędzy serwerem a klientem. W tym celu w serwerach są wykorzystywane certyfikaty SSL. Let’s Encrypt zapewnia łatwy sposób uzyskania i zainstalowania zaufanych certyfikatów za darmo.

Zaczynamy

Na początek, potrzebujesz następujących rzeczy:

  • Serwer04 z użytkownikiem bez uprawnień administratora, ale z uprawnieniami grupy sudo
  • Zainstalowany webserwer Apache z odpowiednio skonfigurowaną domeną lub domenami

Kiedy będziesz gotowy, zaloguj się na serwerze z wykorzystaniem konta sudo.

Instalowanie zależnych pakietów

Pierwszą rzeczą, jaką musimy zrobić, jest aktualizacja pamięci podręcznej naszego Manadżera Pakietów:

sudo apt-get update

Dla instalacji klienta Let’s Encrypt będziemy potrzebowali git. Dla tego uruchom:
sudo apt-get install git

Pobieranie klienta Let’s Encrypt

Teraz pobierzemy klienta Let’s Encrypt z oficjalnego repozytorium umieszczając pliki w specjalnym miejscu na serwerze. Zrobimy to w celu ułatwienia procesu aktualizacji plików z repozytorium gdy pojawi się nowsza wersja. Z uwagi na fakt, że Let’s Encrypt wciąż jest w wersji beta, regularne aktualizacje mogą być konieczne w celu korygowania błędów i wprowadzenie w życie nowych funkcji.

Sklonujemy repozytorium Let’s Encrypt /opt, który jest standardowym katalogiem dla lokalizacji oprogramowania autorstwa trzecich firm na systemach Unix:
sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

Pozwoli to na stworzenie lokalnej kopii oficjalnego repozytorium Let’s Encrypt /opt/letsencrypt.

Konfiguracja certyfikatu SSL

Generowanie certyfikatu SSL dla serwera Apache za pomocą klienta Let’s Encrypt jest bardzo proste. Klient automatycznie otrzymuje i instaluje nowy, ważny dla domen certyfikat SSL.

Wchodzimy do katalogu letsencrypt:

cd /opt/letsencrypt
Uruchomienie polecenia letsencrypt-auto pozwoli na wykonanie interaktywnej instalacji i uzyskanie certyfikatu tylko dla jednej domeny:

./letsencrypt-auto --apache -d example.com

Przekazanie dodatkowych parametrów do polecenia pozwoli na zainstalowanie certyfikatu z walidacją dla wielu domen lub subdomen. Pierwsza domena na liście będzie domeną bazową wykorzystywaną przez Let’s Encrypt w celu stworzenia certyfikatu. W związku z powyższym, zalecamy przeniesienie domeny najwyższego poziomu na początek listy, a następne umieścić dodatkowe subdomeny i pseudonimy:

./letsencrypt-auto --apache -d example.com -d www.example.com

W naszym przypadku domeną bazową będzie example.com.

Po zainstalowaniu zależnych pakietów, zobaczysz przewodnik przedstawiający krok po kroku dopasowanie opcji certyfikatów. Zostaniesz poproszony o podanie adresu email niezbędnego do otrzymywania zawiadomień oraz odzyskiwania klucza. Będziesz miał wybór pomiędzy dostępem HTTP a HTTPS, lub będziesz mógł wybrać opcję przekierowania zapytań na HTTPS.

Generowanie plików certyfikatu na /etc/letsencrypt/live powinno być dostępne tuż po zakończeniu instalacji. Status certyfikatu SSL możesz sprawdzić poprzez następujący link (nie zapomnij zastąpić example.com na domenę bazową):

https://www.ssllabs.com/ssltest/analyze.html?d=example.com&latest

Teraz masz dostęp do Twojej strony internetowej poprzez protokół https.

Ustawienie automatycznego odnowienia

Certyfikaty Let’s Encrypt są ważne przez 90 dni. Aby zniwelować możliwość wygaśnięcia certyfikatu, zalecamy przeprowadzenie odnowienia każde 60 dni. Klient Let’s Encrypt posiada polecenie renew, które automatycznie sprawdza zainstalowane certyfikaty i przeprowadza ich odnowienie, jeżeli ich okres ważności jest krótszy niż 30 dni.

Uruchomienie procesu odnowienia wszystkich zainstalowanych domen jest możliwe poprzez uruchomienie:

./letsencrypt-auto renew

Z uwagi na fakt, że właśnie zainstalowaliśmy certyfikat, polecenie sprawdzi datę ważności i wygeneruje komunikat informujący o tym, że certyfikat jeszcze nie został odnowiony. Powinno to wyglądać mniej więcej następująco:

Checking for new version...
Requesting root privileges to run letsencrypt...
/root/.local/share/letsencrypt/bin/letsencrypt renew
Processing /etc/letsencrypt/renewal/example.com.conf
 
The following certs are not due for renewal yet:
/etc/letsencrypt/live/example.com/fullchain.pem (skipped)
No renewals were attempted.

Należy wziąć pod uwagę, że, jeżeli stworzyłeś certyfikat dla wielu domen, widoczna będzie tylko domena bazowa, natomiast odnowienie powinno być ważne dla wszystkich domen certyfikatu.

Praktycznym sposobem zapobiegania nieważności certyfikatów jest stworzenie cron`a okresowo wykonującego polecenie automatycznego odnowienia. Po tym, jak odnowienie sprawdzi datę ważności i przeprowadzi odnowienie jedynie w przypadku okresu ważności poniżej 30 dni, zalecane jest stworzenie cron`a uruchamiającego się na przykład co tydzień lub codziennie.

Załóżmy crontab`a w celu stworzenia nowego zadania uruchamiającego cotygodniowe polecenie odnowienia. Modyfikacja crontab`a dla użytkownika z uprawnieniami root jest możliwa poprzez uruchomienie:
sudo crontab -e

Dodaj następne polecenie do jednego wiersza:

crontab
30 2 * * 1 /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-e>new.log

Zapisz i zamknij. Stworzyliśmy nowego cron`a wykonującego polecenie letsencrypt-auto renew każdego poniedziałku o godz. 2:30 ranem. Wyniki polecenia zostaną zapisane do pliku dziennika znajdującego się w /var/log/le-renewal.log.

Aktualizacja Klienta Let’s Encrypt (opcjonalnie)

Jak tylko nowa aktualizacja będzie dostępna dla klienta, możesz zaktualizować swoją lokalną kopię uruchamiając git pull z katalogu Let’s Encrypt:

cd /opt/letsencrypt
sudo git pull

Pozwoli to na załadowanie wszystkich zmian z repozytoriom dla aktualizacji Twojego klienta.

Podsumowanie

Pokazaliśmy Ci jak zainstalować darmowy certyfikat SSL z Let’s Encrypt w celu zabezpieczenia swojej strony internetowej korzystającej z Apache. Z uwagi na fakt, że klient Let’s Encrypt jest wciąż w wersji beta, zalecamy regularne sprawdzanie blogu Let’s Encrypt w zakresie ważnych aktualizacji.