Przejdź do treści

Ustawienia plików cookie

Prosimy wybrać, na które rodzaje plików cookie Państwo zezwalają. Wybór można zmienić w dowolnym momencie w Ustawieniach plików cookie na dole każdej strony. Polityka prywatności

Niezbędne

Zawsze włączone

Potrzebne do logowania, zachowania koszyka i zapamiętania wyborów. Są zawsze włączone.

Jakie pliki cookie?
  • weboke_sessie, weboke_klant, weboke_remember: sesja i pozostanie zalogowanym
  • weboke_basket: koszyk
  • wkBtwIncl: wyświetlanie cen z VAT lub bez VAT
  • wok_cookies: wybór dotyczący plików cookie, 12 miesięcy

Mierzą, która reklama prowadzi do odwiedzin lub zamówienia, abyśmy nie płacili za reklamy, które nic nie dają.

Jakie pliki cookie?
  • Google Ads przez Google Tag Manager (_gcl_au, _gcl_aw), do 90 dni
  • OpenAI Ads, reklamy w ChatGPT
  • wok_aff: przez którego partnera trafili Państwo do nas (program partnerski), 60 dni

4,6

Kraj i język

Każdy kraj ma własną stronę z cenami i stawką VAT tego kraju.

Wyświetl

https z Let's Encrypt

Moduł 7: Domena, serwer WWW i https · Czas czytania: 12 min

Cel lekcji: Po tej lekcji będą Państwo potrafili za pomocą certbot uzyskać darmowy certyfikat Let's Encrypt dla nginx, przekierować http na https, sprawdzić automatyczne odnawianie i rozwiązać najczęstsze błędy przy wnioskowaniu o certyfikat.

Kluczowe pojęcia: certyfikat, urząd certyfikacji (CA), ACME, Let's Encrypt, walidacja domeny, HTTP-01, DNS-01, TLS-ALPN-01, certbot, odnawianie, certbot renew --dry-run, okres ważności, ARI, limity (rate limits), staging, CAA, przekierowanie na https

Dlaczego https i co potwierdza certyfikat

Bez https wszystko, co przesyłane jest między przeglądarką a serwerem, przechodzi przez sieć bez szyfrowania: hasła, formularze, pliki cookie. Każdy po drodze (publiczne wifi, zhakowany router) może to podsłuchać lub zmienić. Dlatego przeglądarki oznaczają strony http jako "niezabezpieczone", a niektóre funkcje działają wyłącznie przez https. Dla sejfu na hasła, takiego jak Vaultwarden (lekcja 9.4), https jest wręcz obowiązkowe.

https korzysta z TLS, a do tego serwer potrzebuje certyfikatu: dowodu, podpisanego przez urząd certyfikacji (CA), któremu ufają przeglądarki, że dany klucz należy do danej nazwy. Zwykły certyfikat potwierdza jedynie, że wnioskodawca zarządza nazwą domeny (walidacja domeny). Nie mówi nic o tym, kim Państwo są ani czy są Państwo wiarygodni.

Let's Encrypt to darmowy urząd certyfikacji, który wydaje wyłącznie certyfikaty z walidacją domeny, w pełni automatycznie za pomocą protokołu ACME. Program na Państwa serwerze (klient ACME) wnioskuje o certyfikat, udowadnia, że zarządza nazwą, instaluje go i odnawia na czas. W tej lekcji używamy certbot, klienta stworzonego przez EFF. Caddy (lekcja 7.4) ma wbudowanego klienta ACME.

Jak udowodnić, że zarządzają Państwo nazwą?

Let's Encrypt zna trzy rodzaje wyzwań (challenges):

WyzwanieJakPortWildcard (*.example.com)
HTTP-01umieszczenie pliku pod http://<naam>/.well-known/acme-challenge/80nie
DNS-01ustawienie rekordu TXT _acme-challenge.<naam>braktak
TLS-ALPN-01pokazanie specjalnego certyfikatu podczas uzgadniania TLS (handshake)443nie

Dla zwykłego VPS ze stroną internetową najprostsze jest HTTP-01. Wymaga ono, aby:

  • nazwa wskazywała rekordem A (i AAAA) na Państwa serwer (lekcja 7.1);
  • port 80 był otwarty dla całego świata, nawet jeśli strona poza tym używa wyłącznie https. Let's Encrypt waliduje tylko przez port 80 i z wielu miejsc w internecie; tych adresów nie da się wpisać do zapory;
  • serwer odpowiadał tak samo przez IPv4 i IPv6. Jeśli nazwa ma rekord AAAA, Let's Encrypt najpierw próbuje IPv6. Dopiero gdy przez IPv6 nie da się w ogóle nawiązać połączenia, wraca do IPv4.

DNS-01 jest potrzebne do certyfikatu wildcard lub gdy serwer nie jest dostępny z zewnątrz. Klient ACME musi wtedy móc zmieniać Państwa DNS, zwykle za pomocą klucza API od dostawcy DNS. Taki klucz pozwala zmienić cały DNS: prosimy przechowywać go równie starannie jak hasło.

Instalacja certbot

Twórcy certbot zalecają wersję snap, ponieważ zawsze zawiera najnowszą wersję. Na Debianie i Ubuntu można go też zainstalować po prostu z repozytorium pakietów:

anna@web1:~$ sudo apt install certbot python3-certbot-nginx

Wersja z dystrybucji jest starsza, ale otrzymuje aktualizacje bezpieczeństwa przez apt (lekcje 4.1 i 4.2), co pasuje do reszty tego kursu. Prosimy wybrać jedną z dwóch opcji, nie obie: dwie instalacje przeszkadzają sobie nawzajem przy odnawianiu.

Uzyskanie certyfikatu

Gdy strona z lekcji 7.2 działa już na porcie 80:

anna@web1:~$ sudo certbot --nginx -d example.com -d www.example.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address or hit Enter to skip.
 (Enter 'c' to cancel):
...
Requesting a certificate for example.com and www.example.com

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/example.com/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/example.com/privkey.pem
This certificate expires on 2027-02-07.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

Deploying certificate
Successfully deployed certificate for example.com to /etc/nginx/sites-enabled/example.com
Successfully deployed certificate for www.example.com to /etc/nginx/sites-enabled/example.com
Congratulations! You have successfully enabled HTTPS on https://example.com and https://www.example.com

(Data i szczegóły są przykładowe.) Wtyczka --nginx robi trzy rzeczy: tymczasowo przygotowuje wyzwanie, pobiera certyfikat i dostosowuje Państwa server block, dodając blok listen 443 ssl oraz przekierowanie z http na https. Jeśli wolą Państwo zrobić to samodzielnie, prosimy użyć certbot certonly --nginx i samodzielnie dopisać odpowiednie wiersze do konfiguracji.

Kilka rzeczy, na które warto zwrócić uwagę:

  • Prosimy zawnioskować od razu o wszystkie nazwy należące do strony (-d dla każdej nazwy). Każda nazwa musi wskazywać na serwer, w przeciwnym razie cały wniosek się nie powiedzie.
  • Klucz prywatny (privkey.pem) znajduje się w /etc/letsencrypt/live/ i jest czytelny tylko dla root. Prosimy nie kopiować go w inne miejsca i nigdy nie umieszczać go w kopii zapasowej, którą mogą odczytać inne osoby.
  • Adres e-mail jest opcjonalny. Od czerwca 2025 Let's Encrypt nie wysyła już e-maili, gdy certyfikat zbliża się do wygaśnięcia. Muszą więc Państwo sami pilnować, czy odnawianie się udaje (lekcja 8.3).

Przekierowanie http na https

Po uruchomieniu certbot konfiguracja wygląda mniej więcej tak (w uproszczeniu; certbot sam dodaje komentarze # managed by Certbot i czasem wiersze if):

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name example.com www.example.com;
    ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    root /var/www/example.com;
    ...
}

Pierwszy blok przekierowuje wszystko z http na tę samą nazwę i tę samą ścieżkę przez https, przekierowaniem stałym (301). Plik wyzwania przy odnawianiu nadal działa: Let's Encrypt podąża za tym przekierowaniem. Drugi blok to właściwa strona. Jeśli chcą Państwo dodatkowo przekierować www na samą nazwę domeny (lub odwrotnie), prosimy zrobić to w osobnym bloku, aby odwiedzający widzieli jedną stałą nazwę.

Odnawianie: automatycznie i pod kontrolą

Certyfikat Let's Encrypt jest obecnie ważny 90 dni. Ten okres będzie krótszy: Let's Encrypt zapowiedział, że standardowy profil od 10 lutego 2027 będzie wydawał certyfikaty na 64 dni, a od 16 lutego 2028 na 45 dni. Ręczne odnawianie nie wchodzi więc w grę; musi odbywać się automatycznie.

Podczas instalacji certbot tworzy timer systemd (lub wpis cron), który dwa razy dziennie sprawdza, czy certyfikat trzeba odnowić. Prosimy sprawdzić, czy istnieje, i przetestować odnawianie próbnym wnioskiem:

anna@web1:~$ systemctl list-timers 'certbot*'
NEXT                        LEFT    LAST PASSED UNIT          ACTIVATES
Mon 2026-11-09 22:41:00 CET 9h left -    -      certbot.timer certbot.service
anna@web1:~$ sudo certbot renew --dry-run
...
Congratulations, all simulated renewals succeeded:
  /etc/letsencrypt/live/example.com/fullchain.pem (success)

Po odnowieniu nginx musi też wczytać nowy certyfikat. Z wtyczką nginx certbot załatwia to sam; jeśli używają Państwo certonly, prosimy dodać deploy hook, który przeładuje nginx, na przykład wykonywalny skrypt w /etc/letsencrypt/renewal-hooks/deploy/ zawierający systemctl reload nginx.

Dobre klienty ACME korzystają z ARI (ACME Renewal Information): Let's Encrypt sam wskazuje wtedy, kiedy certyfikat należy odnowić, na przykład wcześniej, gdy z jakąś serią certyfikatów jest problem. Dlatego prosimy aktualizować swojego klienta.

Gdy wniosek się nie powiedzie

Komunikat (skrócony)PrzyczynaRozwiązanie
Timeout during connect (likely firewall problem)port 80 zamknięty lub nazwa wskazuje na inny adreszapora (lekcja 5.2), A/AAAA (lekcja 7.1)
Invalid response from http://.../.well-known/acme-challenge/...: 404odpowiada inny serwer lub inny server block, często przez IPv6listen [::]:80, sprawdzić rekord AAAA
CAA record for example.com prevents issuancerekord CAA dopuszcza wyłącznie innego wystawcęzmienić CAA (lekcja 7.1)
too many certificates already issuedlimit (rate limit)odczekać; testować w środowisku staging

Let's Encrypt stosuje limity (rate limits), aby zapobiegać nadużyciom. Najważniejsze: najwyżej 50 nowych certyfikatów na zarejestrowaną domenę w ciągu 7 dni, najwyżej 5 certyfikatów dla dokładnie tego samego zestawu nazw w ciągu 7 dni oraz najwyżej 5 nieudanych walidacji na nazwę na godzinę. Kto eksperymentuje i raz po raz składa wniosek, szybko na nie trafi. Dlatego prosimy testować w środowisku staging, które ma znacznie szersze limity, ale wydaje certyfikaty, którym przeglądarki nie ufają:

anna@web1:~$ sudo certbot certonly --nginx --staging -d test.example.com

Jeśli tam wszystko działa, prosimy zawnioskować o prawdziwy certyfikat.

Na AlmaLinux i Rocky Linux

Tam certbot pochodzi z EPEL (dnf install certbot python3-certbot-nginx) lub jest dostępny jako snap. Wtyczka i polecenia są takie same. Prosimy pamiętać o firewalld (--add-service=http --add-service=https) i o SELinux, jeśli certyfikaty znajdują się w nietypowym miejscu.

W praktyce

W pakiecie hostingowym panel zajmuje się certyfikatem za Państwa (w WebOké i u innych firm hostingowych z DirectAdmin, cPanel lub Plesk). Na VPS robią to Państwo sami, za pomocą certbot, Caddy lub klienta ACME dostarczonego z Państwa oprogramowaniem. Dotyczy to każdego dostawcy.

Podsumowanie

  • Certyfikat Let's Encrypt potwierdza, że zarządzają Państwo nazwą; certbot wnioskuje o niego, instaluje go i odnawia za pomocą ACME.
  • HTTP-01 wymaga otwartego dla wszystkich portu 80 oraz takiej samej odpowiedzi przez IPv4 i IPv6; DNS-01 służy do certyfikatów wildcard.
  • certbot --nginx -d ... -d ... załatwia certyfikat i przekierowanie na https; prosimy zawnioskować od razu o wszystkie nazwy strony.
  • Certyfikaty są obecnie ważne 90 dni, a okres ten się skraca; prosimy sprawdzić timer i certbot renew --dry-run oraz samodzielnie pilnować daty wygaśnięcia.
  • Prosimy testować z --staging, aby uniknąć limitów; warto zwrócić uwagę na CAA.

Quiz

1. Państwa strona ma być dostępna wyłącznie przez https. Czy przy użyciu HTTP-01 można wtedy zamknąć port 80 w zaporze?



2. Chcą Państwo uzyskać certyfikat dla *.example.com. Jakie wyzwanie jest potrzebne?



3. Wniosek kończy się błędem 404 dla pliku wyzwania, choć curl http://example.com/ przez IPv4 pokazuje Państwa stronę. Jaka jest najbardziej prawdopodobna przyczyna?



4. Dlaczego automatyczne odnawianie jest ważniejsze niż kiedykolwiek?



5. Eksperymentują Państwo i już dziś cztery razy wnioskowali o ten sam certyfikat. Co zrobić przed kolejną próbą?



Zadanie

Zadanie Z7.3: https z ważnym certyfikatem. Prosimy uzyskać certyfikat dla swojej strony (za pomocą certbot lub Caddy), przekierować http na https i przetestować odnawianie za pomocą certbot renew --dry-run (w przypadku Caddy: sprawdzić w logach, czy certyfikat został pobrany). Prosimy wpisać nazwę swojej strony. Program nawiązuje połączenie TLS z portem 443 i sprawdza, czy certyfikat jest ważny, podpisany przez zaufanego wystawcę i obejmuje Państwa nazwę, a następnie pobiera http://<naam>/, aby sprawdzić, czy następuje przekierowanie na https. Dodatkowo prosimy podać, kiedy wygasa Państwa certyfikat i jak u Państwa zorganizowane jest odnawianie.

Zadanie Z7.3: https z ważnym certyfikatem

Tylko dla zalogowanych uczestników kursu. Otwieramy https://<naam>/ i http://<naam>/ tak jak przeglądarka, z naszego serwera WWW.




Wprowadzone dane i wyniki sprawdzania nie są zapisywane. Przeglądarka zapamiętuje udzielone odpowiedzi oraz informację, czy zadanie zostało zaliczone. Po zalogowaniu w Moje kursy zapisywana jest jedynie informacja, że zadanie zostało zaliczone (lub prawie zaliczone); tam można ją również usunąć.

Przeczytaj więcej

Chwileczkę…

Konfiguracja domen

Dla każdej domeny można ustawić serwery nazw, powiązanie z hostingiem oraz to, kto zostanie właścicielem.

Wczytywanie domen…