Preskočiť na obsah
Bezpečnosť DevOps 16. február 2026 · 10 min čítania

Let's Encrypt SSL — bezplatný certifikát pre každý projekt

Let's Encrypt vydáva od roku 2016 bezplatné SSL/TLS certifikáty, ktoré sú dôveryhodné vo všetkých prehliadačoch. Dnes pokrýva viac ako 350 miliónov domén. Certbot automatizuje celý proces — vydanie aj obnovenie — a na bežnom VPS ho nastavíte za 10 minút.

DC

Dušan Chlpek

Senior PHP vývojár · GEAR s.r.o. · 25+ rokov praxe

Čo je Let's Encrypt a prečo nahradil platené certifikáty

Let's Encrypt je nezisková certifikačná autorita (CA) prevádzkovaná organizáciou ISRG (Internet Security Research Group) a podporovaná spoločnosťami ako Mozilla, Google, Cisco a EFF. Vydáva certifikáty DV (Domain Validated) — overuje len to, že žiadateľ kontroluje doménu, nie totožnosť firmy.

Typ certifikátuCenaOvereniePlatnosťVhodné pre
Let's Encrypt DVZadarmoDoména90 dní (autoobnovenie)Väčšina webov, API, portálov
Platený DV10–30 EUR/rokDoména1 rokAk nemáte shell prístup
OV (Organization Validated)50–200 EUR/rokFirma1–2 rokyFiremné portály, B2B
EV (Extended Validation)200–500 EUR/rokFirma + fyzická adresa1–2 rokyBanky, fintech (zelená lišta)

Pre drvivú väčšinu PHP projektov — weby, e-shopy, Laravel API, portály — je Let's Encrypt DV certifikát plne postačujúci. Prehliadače ho zobrazujú rovnako ako platené DV certifikáty.

Predpoklady pred inštaláciou

Cloudflare proxy a Let's Encrypt: Ak je doména za Cloudflare proxy (oranžový oblak), Certbot nedokáže overiť doménu cez HTTP-01 challenge, pretože vidí IP Cloudflare, nie vašu. Riešenie: dočasne prepnúť na DNS-only (šedý oblak), vydať certifikát, potom znovu zapnúť proxy — alebo použiť DNS-01 challenge popísaný nižšie.

Inštalácia Certbot na Ubuntu / Debian

# Aktualizácia balíčkov
sudo apt update && sudo apt upgrade -y

# Inštalácia Certbot a pluginu pre Nginx
sudo apt install certbot python3-certbot-nginx -y

# Pre Apache
sudo apt install certbot python3-certbot-apache -y

Vydanie certifikátu pre Nginx

Certbot s Nginx pluginom automaticky upraví konfiguráciu servera — pridá HTTPS server blok, nastaví presmerovanie HTTP → HTTPS a vloží cestu k certifikátom.

# Vydanie certifikátu + automatická konfigurácia Nginx
sudo certbot --nginx -d vasadomena.sk -d www.vasadomena.sk

# Certbot sa opýta:
# 1. E-mail pre notifikácie o expirácii
# 2. Súhlas s podmienkami
# 3. Či presmerovať HTTP na HTTPS (vyberte 2 — odporúčané)

Po úspešnom vydaní Certbot upraví váš Nginx config. Výsledok vyzerá takto:

# /etc/nginx/sites-available/vasadomena.sk
server {
    listen 80;
    server_name vasadomena.sk www.vasadomena.sk;
    return 301 https://$host$request_uri;  # pridané Certbotom
}

server {
    listen 443 ssl;
    server_name vasadomena.sk www.vasadomena.sk;

    # Certifikáty — pridané Certbotom
    ssl_certificate     /etc/letsencrypt/live/vasadomena.sk/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/vasadomena.sk/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    root /var/www/vasadomena.sk/public;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.4-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Vydanie certifikátu pre Apache

# Vydanie + automatická konfigurácia Apache
sudo certbot --apache -d vasadomena.sk -d www.vasadomena.sk

# Overenie konfigurácie Apache
sudo apache2ctl configtest

# Reload
sudo systemctl reload apache2

Automatické obnovenie certifikátu

Let's Encrypt certifikáty platia 90 dní. Certbot pri inštalácii automaticky vytvorí systemd timer (alebo cron job), ktorý certifikát obnovuje keď mu zostáva menej ako 30 dní.

# Overenie, že systemd timer beží
sudo systemctl status certbot.timer

# Manuálny test obnovy (bez skutočného obnovenia)
sudo certbot renew --dry-run

# Výpis všetkých certifikátov a ich expirácie
sudo certbot certificates
# Ak preferujete cron namiesto systemd timera
sudo crontab -e

# Pridajte — spúšťa sa dvakrát denne (odporúčané Let's Encrypt)
0 3,15 * * * certbot renew --quiet --post-hook "systemctl reload nginx"
--post-hook pre reload: Parameter --post-hook spustí príkaz len vtedy, keď dôjde k skutočnému obnoveniu certifikátu. Nginx (alebo Apache) sa teda zbytočne nereloaduje pri každom spustení cron jobu — len keď je to potrebné.

Wildcard certifikát cez DNS-01 challenge

Štandardný HTTP-01 challenge overí doménu tým, že umiestni súbor na http://vasadomena.sk/.well-known/acme-challenge/. Pre wildcard certifikát (*.vasadomena.sk) musíte použiť DNS-01 challenge — Certbot vytvorí TXT DNS záznam, ktorý Let's Encrypt overí.

# Vydanie wildcard certifikátu (manuálne DNS overenie)
sudo certbot certonly \
  --manual \
  --preferred-challenges dns \
  -d vasadomena.sk \
  -d "*.vasadomena.sk"

# Certbot vypíše niečo takéto:
# Please deploy a DNS TXT record under the name:
# _acme-challenge.vasadomena.sk
# with the following value:
# AbCdEfGh1234567890...
#
# Pridajte tento TXT záznam u registrátora domény,
# počkajte pár minút na propagáciu DNS, potom stlačte Enter.

Automatizácia DNS-01 cez Certbot plugin (pre Cloudflare)

# Inštalácia Cloudflare DNS pluginu
sudo apt install python3-certbot-dns-cloudflare -y

# Vytvorenie credentials súboru
sudo mkdir -p /etc/letsencrypt/cloudflare
sudo nano /etc/letsencrypt/cloudflare/credentials.ini
# /etc/letsencrypt/cloudflare/credentials.ini
dns_cloudflare_api_token = VAS_CLOUDFLARE_API_TOKEN
sudo chmod 600 /etc/letsencrypt/cloudflare/credentials.ini

# Vydanie wildcard certifikátu plne automaticky
sudo certbot certonly \
  --dns-cloudflare \
  --dns-cloudflare-credentials /etc/letsencrypt/cloudflare/credentials.ini \
  -d vasadomena.sk \
  -d "*.vasadomena.sk"

Konfigurácia Laravel po nasadení HTTPS

Po nasadení SSL certifikátu je potrebné Laravel informovať, že beží za HTTPS — inak generuje HTTP URL v e-mailoch, redirectoch a asset linkoch.

# .env
APP_URL=https://vasadomena.sk
// app/Providers/AppServiceProvider.php
// Ak je aplikácia za reverse proxy (Nginx, Cloudflare)
public function boot(): void
{
    if (config('app.env') === 'production') {
        \URL::forceScheme('https');
    }
}
// config/session.php — cookies len cez HTTPS
'secure' => env('SESSION_SECURE_COOKIE', true),
Trusted proxies v Laravel: Ak je aplikácia za Nginx reverse proxy alebo Cloudflare, Laravel nemusí správne detekovať HTTPS. Nastavte TrustProxies middleware — v Laravel 11+ je to cez bootstrap/app.php: ->withMiddleware(fn($m) => $m->trustProxies(at: '*')).

Odporúčaná SSL konfigurácia Nginx pre A+ hodnotenie

Samotný Let's Encrypt certifikát nezaručuje A+ hodnotenie na SSL Labs. Potrebujete aj správnu konfiguráciu TLS protokolov a šifrovacích sád.

# /etc/nginx/snippets/ssl-params.conf
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 1.1.1.1 8.8.8.8 valid=300s;
resolver_timeout 5s;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
# Použitie v server bloku
server {
    listen 443 ssl;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    include /etc/nginx/snippets/ssl-params.conf;
    # ...
}

Riešenie bežných problémov

Chyba: Too many certificates already issued

Let's Encrypt má limit 5 certifikátov za týždeň pre jednu doménu. Ak testujete, použite staging prostredie:

sudo certbot --nginx --staging -d vasadomena.sk

Chyba: Port 80 is not reachable

# Skontrolujte firewall
sudo ufw status
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# Skontrolujte či Nginx beží
sudo systemctl status nginx

# Otestujte HTTP challenge manuálne
curl -I http://vasadomena.sk/.well-known/acme-challenge/test

Certifikát sa neobnovuje automaticky

# Overenie systemd timera
sudo systemctl list-timers | grep certbot

# Ak timer neexistuje, vytvorte cron
sudo crontab -e
# 0 3 * * * certbot renew --quiet --post-hook "systemctl reload nginx"

# Otestujte obnovenie nanečisto
sudo certbot renew --dry-run --verbose

Mixed content — niektoré zdroje sa načítavajú cez HTTP

# Nginx — pridajte hlavičku pre automatickú opravu mixed content
add_header Content-Security-Policy "upgrade-insecure-requests" always;

Záver: Let's Encrypt ako štandard pre každý PHP projekt

Platený SSL certifikát dnes nemá pre bežný PHP projekt žiadne technické opodstatnenie — Let's Encrypt poskytuje rovnakú úroveň šifrovania, je dôveryhodný vo všetkých prehliadačoch a automatické obnovenie eliminuje riziko expirácie. Jedinou výnimkou zostávajú OV a EV certifikáty pre regulované odvetvia (bankovníctvo, zdravotníctvo), kde je vyžadované overenie totožnosti firmy.

Pre každý nový PHP projekt na VPS nastavujem Let's Encrypt ako prvý krok po konfigurácii Nginx — pred deployom samotnej aplikácie.

Potrebujete nastaviť SSL alebo celý server pre PHP projekt?

Nakonfigurujem VPS, Nginx, Let's Encrypt a nasadím vaše Laravel alebo PHP projekty. Odpoveď do 24 hodín.

Nezáväzný dopyt

Ďalšie články

Zavolať E-mail Dopyt

Ochrana súkromia

Táto stránka využíva cookies pre nevyhnutné fungovanie. Rešpektujeme vaše súkromie a legislatívu GDPR.