Let's Encrypt wildcard — certyfikat *.domena.pl przez Certbot
Opublikowano: 9 kwietnia 2026 · Kategoria: SSL / Bezpieczeństwo
Zarządzasz wieloma subdomenami (blog.domena.pl, api.domena.pl, staging.domena.pl)? Zamiast
wystawiać osobny certyfikat dla każdej, użyj certyfikatu wildcard *.domena.pl
— jeden plik obejmuje wszystkie subdomeny. Let's Encrypt udostępnia wildcard SSL za darmo, ale
wymaga weryfikacji przez DNS challenge (nie HTTP). Oto jak to zrobić metodą manualną i w pełni
automatyczną przez Cloudflare.
Dlaczego wildcard? Kiedy warto?
- Wiele subdomen — staging, dev, api, blog, shop — każda pokryta jednym certyfikatem.
- Dynamiczne subdomeny — np. SaaS gdzie każdy klient dostaje subdomenę (klient.twoja-app.pl).
- Prostsze zarządzanie — jedno odnawianie, jeden plik, jeden post-hook.
- Ograniczenia Let's Encrypt — 50 certyfikatów na domenę tygodniowo; wildcard to 1 certyfikat dla nieskończonej liczby subdomen.
Uwaga: certyfikat *.domena.pl NIE obejmuje samej domeny głównej domena.pl. Dlatego zawsze wnioskuj o oba jednocześnie.
Metoda 1: Manual DNS Challenge (bez automatyzacji)
Najprościej — bez dodatkowych wtyczek, ale wymaga ręcznego dodania rekordu TXT przy każdym odnawianiu:
# Instalacja Certbot sudo apt update sudo apt install certbot # Wnioskowanie o certyfikat wildcard — manual DNS challenge sudo certbot certonly \ --manual \ --preferred-challenges dns \ -d "*.domena.pl" \ -d "domena.pl"
Certbot wyświetli komunikat z wartością rekordu TXT do dodania, np.:
Please deploy a DNS TXT record under the name: _acme-challenge.domena.pl with the following value: xYzAbC123_losowy_token_weryfikacyjny Press Enter to Continue
Dodaj rekord TXT w panelu DNS swojego dostawcy, odczekaj kilka minut na propagację (sprawdź: dig TXT _acme-challenge.domena.pl), a następnie naciśnij Enter w terminalu.
Metoda 2: Cloudflare DNS Plugin (w pełni automatyczna)
Najlepsza opcja gdy DNS zarządzany jest przez Cloudflare — Certbot automatycznie dodaje i usuwa rekord TXT przez API. Odnawianie jest w 100% bezobsługowe:
# Krok 1: Instalacja Certbot i pluginu Cloudflare sudo apt install certbot python3-certbot-dns-cloudflare # Lub przez pip (jeśli Certbot zainstalowany przez snap) sudo snap install certbot --classic sudo snap set certbot trust-plugin-with-root=ok sudo snap install certbot-dns-cloudflare
# Krok 2: Utwórz token API Cloudflare # Cloudflare Dashboard > My Profile > API Tokens > Create Token # Uprawnienie: Zone:DNS:Edit (tylko dla Twojej strefy DNS) # Krok 3: Utwórz plik z tokenem API sudo mkdir -p /etc/letsencrypt sudo nano /etc/letsencrypt/cloudflare.ini
# Zawartość /etc/letsencrypt/cloudflare.ini # Opcja 1: API Token (rekomendowana — ograniczone uprawnienia) dns_cloudflare_api_token = twoj_api_token_cloudflare # Opcja 2: Global API Key (starsza metoda — szerokie uprawnienia) # dns_cloudflare_email = [email protected] # dns_cloudflare_api_key = twoj_global_api_key
# Zabezpiecz plik (tylko root może czytać) sudo chmod 600 /etc/letsencrypt/cloudflare.ini # Krok 4: Wnioskowanie o certyfikat wildcard sudo certbot certonly \ --dns-cloudflare \ --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \ --dns-cloudflare-propagation-seconds 60 \ -d "*.domena.pl" \ -d "domena.pl" \ --email [email protected] \ --agree-tos \ --no-eff-email
Parametr --dns-cloudflare-propagation-seconds 60 każe Certbotowi poczekać 60 sekund
na propagację DNS przed weryfikacją. Zwiększ do 120 jeśli masz problemy z weryfikacją.
Weryfikacja certyfikatu
# Sprawdź lokalizację certyfikatów sudo certbot certificates # Szczegóły certyfikatu (SAN, data ważności) sudo openssl x509 -text -noout \ -in /etc/letsencrypt/live/domena.pl/fullchain.pem \ | grep -A 5 "Subject Alternative Name" # Oczekiwany output: # X509v3 Subject Alternative Name: # DNS:*.domena.pl, DNS:domena.pl # Sprawdź datę ważności sudo openssl x509 -enddate -noout \ -in /etc/letsencrypt/live/domena.pl/fullchain.pem
Konfiguracja Nginx z certyfikatem wildcard
# /etc/nginx/sites-available/wildcard.conf
# Subdomena blog
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name blog.domena.pl;
ssl_certificate /etc/letsencrypt/live/domena.pl/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domena.pl/privkey.pem;
root /var/www/blog;
index index.html;
}
# Subdomena api
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name api.domena.pl;
ssl_certificate /etc/letsencrypt/live/domena.pl/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domena.pl/privkey.pem;
location / {
proxy_pass http://localhost:3000;
}
} Automatyczne odnawianie z post-hook dla Nginx
Certbot (snap) automatycznie instaluje systemd timer który sprawdza certyfikaty dwa razy dziennie. Dodaj post-hook który przeładuje Nginx po odnowieniu:
# Utwórz deploy hook sudo nano /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh
#!/bin/bash # /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh # Wykonywany automatycznie po każdym udanym odnowieniu certyfikatu systemctl reload nginx echo "Nginx przeladowany po odnowieniu certyfikatu $(date)"
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh # Sprawdź timer systemd systemctl status snap.certbot.renew.timer # Przetestuj odnawianie (dry-run) sudo certbot renew --dry-run