 Autor: [Robert Zasilny](/autorzy/robert-zasilny) Ekspert bezpieczeństwa i compliance · Zweryfikowano Kwiecień 2026

1.  [Strona główna](/) ›
2.  [Baza wiedzy](/baza-wiedzy/) ›
3.  Certbot + Nginx — SSL/TLS

# Certbot + Nginx — SSL/TLS dla własnej domeny

Opublikowano: 9 kwietnia 2026 · Kategoria: Bezpieczeństwo

HTTP to dziś przeszłość — przeglądarki oznaczają niebezpieczne połączenia, Google obniża ranking niezaszyfrowanych stron, a użytkownicy po prostu nie ufają adresom bez kłódki. Certbot z Let's Encrypt daje darmowy, zaufany certyfikat SSL w 5 minut. Oto jak go skonfigurować na Nginx.

## Instalacja Certbot

Zalecana metoda instalacji to snap — zapewnia zawsze aktualną wersję niezależnie od dystrybucji:

\# Metoda 1: Snap (zalecana — Ubuntu 20.04+, Debian 11+)
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

# Metoda 2: APT (starsza, może nie mieć najnowszej wersji)
sudo apt update
sudo apt install certbot python3-certbot-nginx

# Sprawdź wersję
certbot --version

## Konfiguracja Nginx przed Certbot

Certbot potrzebuje server\_name w konfiguracji Nginx żeby wiedzieć dla której domeny wystawić certyfikat. Upewnij się że masz podstawowy vhost:

\# /etc/nginx/sites-available/example.com
server {
    listen 80;
    server\_name example.com www.example.com;
    root /var/www/example.com/html;
    index index.html index.php;

    location / {
        try\_files $uri $uri/ =404;
    }
}

\# Aktywacja vhosta
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

## Uzyskanie certyfikatu SSL

\# Automatyczna konfiguracja Nginx (certbot modyfikuje nginx.conf)
sudo certbot --nginx -d example.com -d www.example.com

# Tylko certyfikat — bez modyfikacji Nginx (ręczna konfiguracja)
sudo certbot certonly --nginx -d example.com -d www.example.com

# Tryb testowy (staging) — bez limitów, certyfikat nie jest zaufany
sudo certbot --nginx --staging -d example.com

# Nieinteraktywny (dla skryptów)
sudo certbot --nginx -d example.com --non-interactive \\
    --agree-tos --email admin@example.com

Po pomyślnym wykonaniu certbot automatycznie:

-   Pobierze certyfikat do `/etc/letsencrypt/live/example.com/`
-   Zmodyfikuje konfigurację Nginx — doda blok `server` na porcie 443
-   Doda redirect z HTTP na HTTPS
-   Ustawi automatyczne odnawianie przez systemd timer

## Konfiguracja Nginx po Certbot

Certbot generuje podstawową konfigurację, ale warto ją rozbudować o mocniejsze szyfry i nagłówki bezpieczeństwa:

\# /etc/nginx/sites-available/example.com (po certbot)

server {
    listen 80;
    server\_name example.com www.example.com;
    return 301 https://$host$request\_uri;
}

server {
    listen 443 ssl http2;
    server\_name example.com www.example.com;

    # Certyfikaty Let's Encrypt
    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;
    ssl\_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    # Mocniejsza konfiguracja TLS
    ssl\_protocols TLSv1.2 TLSv1.3;
    ssl\_prefer\_server\_ciphers off;
    ssl\_session\_cache shared:SSL:10m;
    ssl\_session\_timeout 1d;

    # Nagłówki bezpieczeństwa
    add\_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add\_header X-Frame-Options DENY always;
    add\_header X-Content-Type-Options nosniff always;
    add\_header Referrer-Policy "strict-origin-when-cross-origin" always;

    root /var/www/example.com/html;

    location / {
        try\_files $uri $uri/ =404;
    }
}

## Automatyczne odnawianie

\# Sprawdź czy timer systemd jest aktywny
sudo systemctl status snap.certbot.renew.timer
# lub
sudo systemctl status certbot.timer

# Test odnowienia (dry-run — nie zmienia certyfikatu)
sudo certbot renew --dry-run

# Alternatywa: cron (jeśli timer nie działa)
# Edytuj /etc/crontab lub crontab -e
0 3 \* \* \* /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"

# Ręczne odnowienie
sudo certbot renew

# Wymuś odnowienie (nawet gdy certyfikat jest ważny)
sudo certbot renew --force-renewal

## Wildcard certyfikat z DNS challenge

Certyfikat wildcard (`*.example.com`) pokrywa wszystkie subdomeny. Wymaga weryfikacji DNS — musisz dodać rekord TXT do swojej domeny:

\# Ręczna weryfikacja DNS (certbot zatrzyma się i poczeka)
sudo certbot certonly --manual --preferred-challenges dns \\
    -d "\*.example.com" -d "example.com"

# Certbot wyświetli komunikat:
# Please deploy a DNS TXT record under the name:
# \_acme-challenge.example.com
# with the following value: aBcDeFgHiJ...
# Po dodaniu rekordu naciśnij Enter

\# Automatyczna DNS challenge przez plugin Cloudflare
pip install certbot-dns-cloudflare

# /root/.secrets/cloudflare.ini
# dns\_cloudflare\_api\_token = TWÓJ\_TOKEN

sudo certbot certonly \\
    --dns-cloudflare \\
    --dns-cloudflare-credentials /root/.secrets/cloudflare.ini \\
    -d "\*.example.com" -d "example.com"

## Troubleshooting

-   **Błąd 80/443 port zajęty** — przed uzyskaniem certyfikatu upewnij się że Nginx działa i port 80 jest dostępny z internetu. Sprawdź firewall: `ufw allow 80` i `ufw allow 443`.
-   **Certyfikat nie odnawia się** — sprawdź logi: `journalctl -u snap.certbot.renew` lub `/var/log/letsencrypt/letsencrypt.log`.
-   **Too many certificates** — używaj `--staging` do testów. Limity resetują się po 7 dniach.
-   **Certyfikat wygasł mimo timera** — sprawdź czy post-hook restartuje Nginx: `certbot renew --post-hook "nginx -s reload"`.
-   **Sprawdź ważność certyfikatu** — `openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -dates`

## Najczęstsze pytania

Jak często certbot odnawia certyfikaty Let's Encrypt? +

Certyfikaty Let's Encrypt są ważne 90 dni. Certbot domyślnie sprawdza co 12 godzin (przez timer systemd lub cron) czy certyfikat wygaśnie w ciągu 30 dni — jeśli tak, odnawia go automatycznie. Efektywnie certyfikat jest odnawiany co ~60 dni. Możesz wymusić odnowienie przez certbot renew --force-renewal.

Co zrobić gdy certbot zwraca błąd "too many certificates"? +

Let's Encrypt ma limit 5 certyfikatów na domenę tygodniowo. Najczęstsza przyczyna przekroczenia: testowanie w pętli lub wielokrotna reinstalacja. Rozwiązanie: (1) użyj flagi --staging do testów (żadnych limitów, certyfikaty niebezpieczne dla przeglądarek), (2) sprawdź istniejące certyfikaty przez certbot certificates i przywróć zamiast tworzyć nowe. Po 7 dniach limit się resetuje.

Jak uzyskać wildcard certyfikat dla \*.domena.pl? +

Wildcard certy wymagają DNS challenge (nie HTTP). Musisz dodać rekord TXT \_acme-challenge.domena.pl w DNS swojej domeny. Jeśli dostawca DNS ma API (Cloudflare, OVH, Route53), możesz użyć pluginu certbot-dns-<provider> który zautomatyzuje to. Bez API: certbot certonly --manual --preferred-challenges dns -d "\*.domena.pl" — certbot pokaże wartość TXT do dodania ręcznie. Wildcard pokrywa \*.domena.pl, ale NIE samą domena.pl — dodaj ją osobno: -d "\*.domena.pl" -d "domena.pl".

Czy HSTS może zablokować dostęp do strony? +

Tak — dlatego zanim włączysz HSTS, upewnij się że HTTPS działa poprawnie na wszystkich subdomenach. HSTS mówi przeglądarce żeby NIGDY nie łączyła się przez HTTP przez N sekund (max-age). Jeśli certyfikat wygaśnie lub zostanie odwołany, użytkownicy nie dostaną się na stronę. Na początku ustaw krótki max-age=300 (5 minut) i testuj. Po weryfikacji zwiększ do 31536000 (1 rok) i rozważ preload. includeSubDomains stosuj tylko gdy WSZYSTKIE subdomeny mają HTTPS.

## Sprawdź oferty pasujące do tego scenariusza

Poniżej masz szybkie przejścia do ofert i stron z kodami rabatowymi tam, gdzie są dostępne.

Contabo

VPS z pełną kontrolą — samodzielna konfiguracja Nginx + Certbot bez ograniczeń

Full Root

[Aktywuj rabat →](/out/contabo)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/contabo)

Mikrus

Tani VPS do testowania konfiguracji SSL/TLS przed wdrożeniem na produkcję

Dev VPS

[Aktywuj rabat →](/out/mikrus)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/mikrus)

LH.pl

Hosting z automatycznym SSL Let's Encrypt bez potrzeby konfiguracji Certbot

Auto SSL

[Aktywuj rabat →](/out/lh-pl)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/lh-pl)

## Powiązane strony

-   [Nginx — konfiguracja virtual hostów](/baza-wiedzy/nginx-vhost-konfiguracja)
-   [SSL Let's Encrypt — automatyzacja](/baza-wiedzy/ssl-lets-encrypt-automatyzacja)
-   [SPF, DKIM i DMARC — konfiguracja](/baza-wiedzy/spf-dkim-dmarc-konfiguracja)
-   [Wszystkie artykuły](/baza-wiedzy/)