Aktuálna situácia: PHP2Shell. Dve kritické zraniteľnosti PHP (CVSS 9.2) umožňujú spustenie škodlivého kódu bez prihlásenia. Záplaty od 21. 10. 2026.Čo treba urobiť teraz →

Správna konfigurácia TLS a HTTPS

Aké verzie TLS a cipher suites by mal dnes webserver ponúkať, na čom sa odporúčania zakladajú a ako skontrolujete Nginx, Apache a odchádzajúce spojenia z PHP.

Stav 6 min čítaniaHardening a konfigurácia

Stručne: Solídna konfigurácia TLS pre webserver ponúka len TLS 1.2 a TLS 1.3, používa cipher suites s Forward Secrecy a autentifikovaným šifrovaním (AES-GCM, ChaCha20-Poly1305) a certifikát s kľúčom ECDSA alebo dostatočne dlhým kľúčom RSA, ktorý sa obnovuje automaticky. Orientáciu dávajú smernica BSI (nemecký Spolkový úrad pre informačnú bezpečnosť) TR-02102-2 a odporúčania Server-Side-TLS od TLSRef. Výsledok skontrolujte zvonka a nezabudnite na spojenia, ktoré si vytvára samotné PHP.

Prečo staré nastavenia TLS prežívajú tak dlho

Zámok v prehliadači je tam, takže šifrovanie sa považuje za vybavené. Tak zmýšľa veľa prevádzkovateľov, a preto zostáva konfigurácia TLS často roky nezmenená. Pochádza potom z čias zriadenia servera, zo skopírovanej šablóny alebo zo štandardných hodnôt panela.

Problém: odporúčania sa menia. Verzie protokolov sa nahrádzajú, postupy sa považujú za slabé, pribúdajú nové postupy výmeny kľúčov. BSI zverejnil TR-02102 naposledy vo verzii 2026-01 z 27. 1. 2026 a už tam upozorňuje na hybridné postkvantové postupy pre TLS 1.3. Kto svoje nastavenia už roky neprehliadol, s vysokou pravdepodobnosťou nie je na aktuálnom stave.

Kto teraz po PHP2Shell tak či tak kontroluje servery, môže si konfiguráciu TLS pozrieť jedným ťahom. Zraniteľnosť PHP neuzavrie, ale patrí ku každému poriadnemu spevneniu (hardeningu).

Na čom sa dobrá konfigurácia TLS pre webserver zakladá

Dva zdroje sú pre prevádzkovateľov v Nemecku obzvlášť užitočné. BSI TR-02102 hodnotí kryptografické postupy; časť 2 sa venuje TLS. Zameriava sa najmä na vývojárov a plánovačov a pre úrady a regulované oblasti je často meradlom. Odporúčania Server-Side-TLS, kedysi udržiavané na wiki Mozilly, sa dnes vedú pod TLSRef a poskytujú konkrétne profily vhodné na skopírovanie.

TLSRef vo verzii 6.0 rozlišuje dva profily:

Znak Intermediate (pre väčšinu webov) Modern
Protokoly TLS 1.2 a TLS 1.3 len TLS 1.3
Cipher suites TLS 1.2 ECDHE s AES-GCM alebo ChaCha20-Poly1305 žiadne
Skupiny výmeny kľúčov X25519MLKEM768, X25519, prime256v1, secp384r1 ako Intermediate
Certifikát odporúča sa ECDSA P-256 alebo RSA 2048 bit ECDSA P-256
Platnosť certifikátu odporúča sa 90 dní, najviac 366 dní 90 dní
HSTS max-age dva roky dva roky

Pre verejné weby je obvyklým východiskom Intermediate. Profil vylučuje veľmi staré zariadenia, ale pokrýva aktuálne prehliadače a operačné systémy. Hybridná skupina X25519MLKEM768 vyžaduje aktuálnu knižnicu TLS. Skôr než ju zapíšete, overte, či ju vaša verzia OpenSSL pozná.

Nginx a Apache: bezpečný východiskový bod

Nasledujúce príklady zavádzajú profil Intermediate. Cesty sú zástupné hodnoty, zoznam cipher suites platí pre TLS 1.2; TLS 1.3 prináša vlastné bezpečné štandardné postupy.

server {
    listen 443 ssl;
    server_name www.example.de;

    ssl_certificate     /etc/ssl/example/fullchain.pem;
    ssl_certificate_key /etc/ssl/example/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    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_prefer_server_ciphers off;
}

server {
    listen 80;
    server_name www.example.de;
    return 301 https://$host$request_uri;
}
SSLProtocol             -all +TLSv1.2 +TLSv1.3
SSLCipherSuite          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
SSLHonorCipherOrder     off

Druhý blok server presmerúva nešifrované volania trvalo na HTTPS. Presmerovanie by malo ukazovať priamo na konečnú adresu a nemalo by prechádzať viacerými medzistanicami. Skontrolujte potom aj vložené zdroje: obrázky, skripty alebo písma, ktoré sa ešte načítavajú cez HTTP, vyvolajú v prehliadači upozornenia alebo sa zablokujú.

Nastavenie, že poradie volí klient, zodpovedá odporúčaniu TLSRef: všetky ponúkané postupy sa považujú za bezpečné a zariadenia bez akcelerácie AES tak môžu uprednostniť ChaCha20. Po každej zmene konfiguráciu otestujte (nginx -t resp. apachectl configtest) a službu znova načítajte. Vhodnú hlavičku HSTS a ďalšie pokyny pre prehliadač opisuje sprievodca Bezpečnostné hlavičky pre weby.

Tip

Panely ako Plesk alebo cPanel vlastné zmeny vo vygenerovaných súboroch často prepisujú. Požiadavky na TLS tam nastavujte cez určené nastavenia alebo šablóny panela.

Certifikáty: kľúč, reťazec, obnovenie

Veľká časť problémov s TLS v praxi nesúvisí s cipher suites, ale s certifikátmi. Typické chyby sú neúplný reťazec, v ktorom chýba sprostredkujúci certifikát, certifikáty s uplynutou platnosťou na vedľajších doménach a súkromné kľúče s príliš širokými právami k súboru.

Pomôžu tri pravidlá:

  1. Obnovovať automaticky a obnovu monitorovať. Krátke platnosti, aké odporúča TLSRef, sú praktické len s automatizáciou.
  2. Chrániť súkromné kľúče: čitateľné len pre root a proces webservera, nikdy vo webovom koreni, nikdy v repozitári.
  3. Zachytiť všetky názvy: hlavná doména, www, subdomény pre obchod, staging, webové rozhranie pošty a panely.

Kto používa certifikáty na viacerých miestach, napríklad na CDN, load balanceri a pôvodnom serveri, mal by viesť prehľad: ktorý certifikát je kde nainštalovaný, kto ho obnovuje a kedy vyprší. Ak tento prehľad chýba, certifikát s uplynutou platnosťou sa často objaví až vtedy, keď sa ozvú zákazníci.

Ako skontrolujete svoju konfiguráciu zvonka

Nasledujúce príkazy sú čisté kontroly a nič nemenia. Názov hostiteľa nahraďte vlastným:

# TLS 1.3 a TLS 1.2 by mali fungovať
openssl s_client -connect www.example.de:443 -servername www.example.de -tls1_3 </dev/null
openssl s_client -connect www.example.de:443 -servername www.example.de -tls1_2 </dev/null
# TLS 1.1 by mal zlyhať
openssl s_client -connect www.example.de:443 -servername www.example.de -tls1_1 </dev/null
# Platnosť a držiteľ doručeného certifikátu
openssl s_client -connect www.example.de:443 -servername www.example.de </dev/null 2>/dev/null | openssl x509 -noout -subject -dates

Zlyhanie pri teste TLS 1.1 môže byť aj preto, že vaša lokálna verzia OpenSSL starý protokol vôbec neponúka. Na úplnú správu o všetkých ponúkaných postupoch sa hodí špecializovaný skener TLS. Kontrolujte pritom každú subdoménu zvlášť, pretože často bežia s vlastnými nastaveniami.

Zabudnuté: TLS tam, kde je klientom samotné PHP

Aplikácie PHP si samy vytvárajú veľa spojení: k poskytovateľom platieb, prepravcom, rozhraniam, poštovým serverom a databázam. Najčastejšou chybou tu nie je slabé nastavenie, ale vypnutá kontrola certifikátu, často ako rýchle riešenie problému pri vývoji.

<?php
// Bezpečne: certifikát a názov hostiteľa sa overujú (ponechať štandardné správanie)
$ch = curl_init('https://api.partner.example/v1/status');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_SSL_VERIFYPEER => true,
    CURLOPT_SSL_VERIFYHOST => 2,
    CURLOPT_TIMEOUT        => 10,
]);
$antwort = curl_exec($ch);

Hľadajte v kóde CURLOPT_SSL_VERIFYPEER s hodnotou false a verify_peer v kontextoch streamov. Každé nájdené miesto prakticky ruší ochranu TLS pre dané spojenie. Tam, kde služby ležia za CDN, by aj úsek medzi CDN a pôvodným serverom mal používať platný, overovaný certifikát. Ďalšie nastavenia webservera pre prostredia PHP nájdete v článku Bezpečná konfigurácia Nginx pre PHP, meradlá pre celé spevnenie v článku Benchmarky CIS a moduly BSI.

Ako konkrétne pomáha PHP SOS?

  • Zachytíme všetky názvy hostiteľov a služby s TLS, vrátane panelov, stagingu a webových rozhraní pošty.
  • Nastavenia porovnáme s TR-02102 a vhodným profilom TLSRef a vedomé odchýlky zdokumentujeme.
  • Certifikáty prestavíme na automatické obnovovanie s monitoringom.
  • V kóde aplikácie hľadáme vypnuté kontroly certifikátov a ukážeme opravu.

TLS je jedným z modulov nášho spevnenia servera (hardening) pre webservery PHP; vzťah k aktuálnej situácii vysvetľuje Čo je PHP2Shell?.

Časté otázky

Musím ešte ponúkať TLS 1.0 a TLS 1.1?

Spravidla nie. Aktuálne odporúčania, ako profil Intermediate od TLSRef, stanovujú ako spodnú hranicu TLS 1.2. Kto potrebuje staršie protokoly pre staré zariadenia, mal by sa tak rozhodnúť vedome, rozhodnutie zdokumentovať a obmedziť ho na oddelenú službu.

Je bezplatný certifikát menej bezpečný než kúpený?

Pre šifrovanie to nerobí rozdiel. Rozhodujúci je typ kľúča, dĺžka kľúča, úplný reťazec certifikátov a spoľahlivé automatické obnovovanie. Rozdiely sú v rozsahu overenia, platnosti a službách poskytovateľa.

Stačí HTTPS medzi návštevníkom a CDN?

Nie. Aj spojenie medzi CDN a pôvodným serverom by malo byť šifrované a malo by overovať certifikát pôvodného servera. Inak idú údaje po druhom úseku sieťou nešifrované alebo bez overenia.

Čo má TLS spoločné s PHP2Shell?

Priamo nič. TLS chráni údaje na prenosovej ceste, PHP2Shell sa týka interpretera PHP na serveri. Šifrované spojenie spoľahlivo prenáša aj útočné požiadavky, preto je aktualizácia PHP povinná bez ohľadu na to.

Zdroje

Okamžitý kontakt

Každá hodina sa počíta. Napíšte nám hneď.

Stručne opíšte systém, verziu PHP a svoje pozorovanie. Ozveme sa, vyjasníme situáciu a budeme pracovať na diaľku, kým nebude incident uzavretý a zdokumentovaný.

Okamžitá pomoc