Č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átu | Cena | Overenie | Platnosť | Vhodné pre |
|---|---|---|---|---|
| Let's Encrypt DV | Zadarmo | Doména | 90 dní (autoobnovenie) | Väčšina webov, API, portálov |
| Platený DV | 10–30 EUR/rok | Doména | 1 rok | Ak nemáte shell prístup |
| OV (Organization Validated) | 50–200 EUR/rok | Firma | 1–2 roky | Firemné portály, B2B |
| EV (Extended Validation) | 200–500 EUR/rok | Firma + fyzická adresa | 1–2 roky | Banky, 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
- VPS alebo dedikovaný server s prístupom cez SSH (Ubuntu 22.04 / Debian 12 v príkladoch)
- Doména smeruje na IP servera cez DNS A záznam — overenie trvá do 24 hodín, prakticky minúty
- Port 80 (HTTP) aj 443 (HTTPS) otvorené vo firewalle
- Nainštalovaný Nginx alebo Apache
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 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),
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