Deployment aplikacji Średnio zaawansowany 60 min

HTTPS z Let's Encrypt i Certbot

Zabezpieczysz publiczną aplikację protokołem HTTPS, uzyskasz certyfikat Let's Encrypt przez Certbota i sprawdzisz automatyczne odnawianie certyfikatu.

Wróć do listy lekcji

1. Krótka teoria

HTTP przesyła dane bez ochrony zapewnianej przez szyfrowanie transportu, natomiast HTTPS to HTTP działający przez TLS. TLS szyfruje połączenie, chroni integralność przesyłanych danych i pozwala klientowi zweryfikować tożsamość serwera na podstawie certyfikatu. Certyfikat musi obejmować nazwę używaną przez przeglądarkę, na przykład app.example.com. Przed jego uzyskaniem rekord DNS domeny powinien wskazywać właściwy serwer, Nginx musi poprawnie obsługiwać tę nazwę na porcie 80, a firewall i ewentualny firewall dostawcy muszą przepuszczać porty 80 i 443. Port 80 jest potrzebny między innymi do typowej weryfikacji domeny i przekierowania HTTP, a 443 do ruchu HTTPS. Let's Encrypt jest publicznym urzędem certyfikacji wydającym krótkotrwałe certyfikaty, a Certbot automatyzuje ich uzyskanie i odnawianie. W systemie zgodnym z RHEL, takim jak Rocky Linux, instaluje się Certbota wraz z pluginem Nginx. W typowej instalacji Rocky Linux pakiety te mogą pochodzić z repozytorium EPEL, które trzeba wcześniej włączyć, jeśli nie są dostępne w aktywnych repozytoriach. Polecenie certbot --nginx sprawdza domenę, pobiera certyfikat i może bezpiecznie zmodyfikować konfigurację Nginxa, w tym dodać przekierowanie z HTTP do HTTPS. Aktywne pliki są zarządzane w /etc/letsencrypt/live/app.example.com/; konfiguracja Nginxa odwołuje się do nich, ale nie należy ich ręcznie kopiować. Po zmianie zawsze trzeba wykonać nginx -t, a dopiero potem przeładować Nginxa. Certyfikaty Let's Encrypt są odnawiane okresowo. Sam fakt uzyskania pierwszego certyfikatu nie wystarcza: należy wykonać test certbot renew --dry-run i sprawdzić timer systemd. Przy błędzie najpierw kontroluje się DNS, dostępność portu 80, reguły firewalla, stan Nginxa oraz logi Certbota. Certyfikat samodzielnie podpisany może służyć w laboratorium, ale nie zastępuje zaufanego certyfikatu dla publicznej aplikacji.

2. Przykłady komend

sudo dnf install epel-release

Włącza EPEL na Rocky Linux, jeśli pakiety Certbota nie są jeszcze dostępne.

$ sudo dnf install epel-release
sudo dnf install certbot python3-certbot-nginx

Instaluje Certbota i plugin integrujący go z Nginxem.

$ sudo dnf install certbot python3-certbot-nginx
sudo certbot --nginx -d app.example.com

Uzyskuje certyfikat dla domeny i aktualizuje konfigurację Nginxa.

$ sudo certbot --nginx -d app.example.com
sudo certbot renew --dry-run

Testuje pełny mechanizm odnowienia bez zastępowania ważnego certyfikatu.

$ sudo certbot renew --dry-run
systemctl list-timers | grep certbot

Sprawdza timer systemd odpowiedzialny za okresowe uruchamianie odnowienia.

$ systemctl list-timers | grep certbot
sudo nginx -t && sudo systemctl reload nginx

Weryfikuje składnię i przeładowuje poprawną konfigurację bez pełnego restartu.

$ sudo nginx -t
$ sudo systemctl reload nginx
curl -I https://app.example.com

Sprawdza odpowiedź aplikacji przez publiczny adres HTTPS.

$ curl -I https://app.example.com
HTTP/2 200

3. Zadanie praktyczne

Dla laboratoryjnej domeny app.example.com sprawdź rekord DNS, stan Nginxa oraz dostępność portów 80 i 443 w firewalld. Zainstaluj certbot i python3-certbot-nginx, wykonaj sudo certbot --nginx -d app.example.com i wybierz przekierowanie HTTP do HTTPS. Następnie uruchom sudo nginx -t, sprawdź domenę przez curl -I, wykonaj sudo certbot renew --dry-run i potwierdź obecność timera systemd. Jeśli nie dysponujesz publiczną domeną, opisz każdy krok, wymagania sieciowe i oczekiwane wyniki bez żądania prawdziwego certyfikatu.

4. Typowe błędy

  • Uruchamianie Certbota, zanim DNS domeny wskazuje właściwy serwer.
  • Blokowanie portu 80 lub 443 w firewalld albo firewallu dostawcy.
  • Pominięcie testu nginx -t przed przeładowaniem konfiguracji.
  • Ręczne kopiowanie plików z /etc/letsencrypt i przerywanie mechanizmu odnowienia.
  • Założenie, że pierwszy certyfikat będzie odnawiał się bez przetestowania timera.
  • Traktowanie certyfikatu samodzielnie podpisanego jako rozwiązania dla publicznej produkcji.

5. Podsumowanie

HTTPS wykorzystuje TLS do ochrony połączenia i potwierdzenia tożsamości serwera. Przed użyciem Certbota potrzebne są poprawny DNS, działający Nginx oraz dostępne porty 80 i 443. Plugin Nginx może uzyskać certyfikat, skonfigurować HTTPS i przekierowanie. Po wdrożeniu trzeba przetestować konfigurację, publiczny adres oraz okresowe odnawianie przez timer systemd.

Flow nauki
  1. Teoria
  2. Przykład
  3. Ćwiczenie
  4. Quiz
  5. Praktyka
  6. Podsumowanie