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.
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
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.