Darmowy certyfikat SSL z Let's Encrypt i Certbotem

Opublikowano Zaktualizowano 4 min czytania

Darmowy certyfikat SSL dla twojego serwera z Linuksem: tak zainstalujesz Certbota na Debianie i Ubuntu, wystawisz certyfikat Let's Encrypt dla Apache i włączysz automatyczne odnawianie.

Certyfikat SSL od Let's Encrypt nic nie kosztuje, konfigurujesz go w kilka minut, a akceptuje go każda popularna przeglądarka. W tym poradniku włączysz HTTPS na własnym serwerze z Linuksem i Apache: na Debianie 13, Debianie 12, Ubuntu 24.04 LTS oraz Ubuntu 22.04 LTS.

Wystawieniem certyfikatu zajmuje się Certbot, oficjalny klient ACME organizacji Electronic Frontier Foundation. Certbot wnioskuje o certyfikat, wpisuje go do konfiguracji Apache, a potem odnawia go samodzielnie przez timer systemd.

Wymagania

  • Domena, której rekord A (a przy IPv6 dodatkowo rekord AAAA) wskazuje na twój serwer VPS albo serwer root.
  • Działający serwer WWW Apache2 z wpisem VirtualHost dla tej domeny.
  • Dostęp roota przez SSH.
  • Port 80 i port 443 muszą być osiągalne z zewnątrz. Let's Encrypt sprawdza domenę przez port 80.

Najpierw sprawdź, czy domena faktycznie wskazuje na twój serwer. Wpisz ją w tym celu na stronie https://check-host.net/. Jeśli pojawi się tam adres IP twojego serwera, możesz działać dalej. Jeśli DNS nadal kieruje na stary cel, poczekaj na aktualizację, bo inaczej wystawienie certyfikatu się nie powiedzie.

Aktualizacja systemu

Na początek zaktualizuj listę pakietów oraz zainstalowane pakiety:

apt update && apt upgrade -y

Instalacja Certbota

Są dwie typowe drogi. Pakiet z dystrybucji jest najprostszy i dla większości serwerów w zupełności wystarcza. Pakiet snap dostarcza zawsze najnowszą wersję Certbota i to jego oficjalnie zaleca Electronic Frontier Foundation.

Wariant 1: Certbot z repozytorium dystrybucji

Na Debianie i Ubuntu Certbot oraz wtyczka do Apache leżą wprost w źródłach pakietów:

apt install certbot python3-certbot-apache -y

Rozpowszechniony kiedyś pakiet „python-certbot-apache” należał do Pythona 2 i już nie istnieje. Na wszystkich aktualnych wersjach Debiana i Ubuntu poprawna nazwa pakietu to „python3-certbot-apache”.

Wariant 2: instalacja Certbota przez snap

Jeśli chcesz mieć każdorazowo najnowszą wersję Certbota, na przykład dla wtyczek DNS albo certyfikatów wildcard, zainstaluj Certbota jako snap. Wcześniej usuń ewentualną instalację z pakietu dystrybucji, żeby obie sobie nawzajem nie wchodziły w drogę:

apt remove certbot -y
snap install core
snap refresh core
snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/certbot

Wystawienie certyfikatu i podpięcie go do Apache

Najszybsza droga to wtyczka do Apache. Certbot czyta istniejące wpisy VirtualHost, wnioskuje o certyfikat i sam zapisuje pasującą konfigurację SSL:

certbot --apache -d MojaDomena.pl -d www.MojaDomena.pl

Jeśli wolisz sam panować nad konfiguracją Apache, sprawdzenie domeny możesz przeprowadzić przez katalog webroot. Podaj przy tym dokładnie ten katalog, którego VirtualHost używa jako DocumentRoot:

certbot --authenticator webroot --installer apache -w /var/www/MojaDomena.pl -d MojaDomena.pl -d www.MojaDomena.pl

Jeśli twoja strona leży w katalogu domyślnym, polecenie wygląda tak:

certbot --authenticator webroot --installer apache -w /var/www/html/ -d MojaDomena.pl -d www.MojaDomena.pl

Pytania zadawane przez Certbota

Przy pierwszym uruchomieniu Certbot zadaje kilka pytań:

  • Adres e-mail: Podaj adres, który naprawdę czytasz. Let's Encrypt wysyła na niego ostrzeżenie, gdy odnowienie nie dojdzie do skutku.
  • Warunki korzystania: Klawiszem „A” wyrażasz zgodę.
  • Newsletter Electronic Frontier Foundation: „Y” oznacza tak, „N” nie. To dobrowolne i nie ma wpływu na certyfikat.
  • Przekierowanie na HTTPS: Wybierz opcję „Redirect”, żeby Apache automatycznie kierował wszystkie wywołania HTTP na HTTPS.

Następnie Certbot pokazuje ścieżkę do certyfikatu. Pliki leżą w katalogu /etc/letsencrypt/live/MojaDomena.pl/. Nie edytuj ich ręcznie, przy każdym odnowieniu są zapisywane na nowo.

Sprawdzenie automatycznego odnawiania

Certyfikat od Let's Encrypt jest ważny 90 dni. Certbot odnawia go automatycznie, gdy do końca ważności zostaje mniej niż 30 dni. Pakiet dostarcza w tym celu timer systemd. Sprawdź, czy jest aktywny:

systemctl list-timers certbot.timer

Jeśli timer nie jest aktywny, włącz go:

systemctl enable --now certbot.timer

Następnie przetestuj cały przebieg na sucho. Nic nie zostaje wtedy wystawione, Certbot jedynie odgrywa odnowienie:

certbot renew --dry-run

Żeby Apache po odnowieniu naprawdę korzystał z nowego certyfikatu, ustaw jednorazowo deploy hook:

certbot renew --deploy-hook "systemctl reload apache2"

Wyświetlanie i usuwanie certyfikatów

Przegląd wszystkich certyfikatów zarządzanych na serwerze daje polecenie:

certbot certificates

Certyfikat, którego już nie potrzebujesz, usuwasz w ten sposób, żeby Certbot nie próbował go dalej odnawiać:

certbot delete --cert-name MojaDomena.pl

Częste błędy

  • „Could not bind to port 80”: Port 80 zajmuje inna usługa. Zatrzymaj ją albo skorzystaj z metody webroot, która używa działającego Apache.
  • „Invalid response from http://.../.well-known/acme-challenge/...”: Domena nie wskazuje na ten serwer, firewall blokuje port 80 albo podany katalog webroot nie pasuje do wpisu VirtualHost.
  • „The requested apache plugin does not appear to be installed”: Brakuje pakietu „python3-certbot-apache”.
  • „too many certificates already issued”: To limit po stronie Let's Encrypt. Konfiguracje testuj na przyszłość z --dry-run, zanim poprosisz o prawdziwy certyfikat.
  • Przeglądarka nadal pokazuje ostrzeżenie: Wyczyść cache przeglądarki i sprawdź, czy Apache został przeładowany po wystawieniu certyfikatu.

Trwałe przekierowanie HTTP na HTTPS

Jeśli podczas pytań Certbota przekierowanie nie zostało włączone, możesz je dodać w dowolnej chwili. Jak to działa przez plik .htaccess, opisujemy w osobnym wpisie o przekierowaniu z HTTP na HTTPS.

Najczęstsze pytania

Ile kosztuje certyfikat SSL od Let's Encrypt?
Nic. Let's Encrypt to urząd certyfikacji działający non-profit, który wystawia certyfikaty bezpłatnie. Nie ma ani opłat jednorazowych, ani bieżących.
Jak długo ważny jest certyfikat Let's Encrypt?
90 dni. Certbot odnawia go automatycznie, gdy do końca ważności zostaje mniej niż 30 dni. Odpowiedzialny za to timer systemd powstaje już podczas instalacji.
Czy muszę odnawiać certyfikat ręcznie?
Nie. Sprawdź jednorazowo poleceniem certbot renew --dry-run, czy odnowienie przebiega bez błędów. Potem Certbot zajmuje się tym samodzielnie w tle.
Czy Let's Encrypt działa też dla subdomen?
Tak. Kolejne nazwy dopisujesz do polecenia po prostu dodatkowymi parametrami typu -d. Certyfikat wildcard wymaga dodatkowo weryfikacji przez wpis DNS, a więc pasującej wtyczki DNS do Certbota.
Dlaczego sprawdzenie domeny kończy się błędem?
W niemal wszystkich przypadkach rekord A domeny nie wskazuje na ten serwer albo firewall blokuje port 80. Let's Encrypt nie dociera wtedy do serwera i przerywa wystawianie certyfikatu.

Lets-Encrypt Certbot Certyfikat SSL HTTPS Apache Debian Ubuntu