Dabartinė padėtis: PHP2Shell. Du kritiniai PHP pažeidžiamumai (CVSS 9,2) leidžia vykdyti kenkėjišką kodą be prisijungimo. Pataisos nuo 2026-10-21.Ką dabar daryti →

TLS ir HTTPS teisingas sukonfigūravimas

Kokias TLS versijas ir šifrų rinkinius šiandien turėtų siūlyti žiniatinklio serveris, kuo remiasi rekomendacijos ir kaip patikrinti Nginx, Apache ir išeinančius PHP ryšius.

Būsena 5 min. skaitymoSutvirtinimas ir konfigūracija

Trumpai: solidi TLS konfigūracija žiniatinklio serveriui siūlo tik TLS 1.2 ir TLS 1.3, naudoja šifrų rinkinius su Forward Secrecy ir autentifikuotu šifravimu (AES-GCM, ChaCha20-Poly1305), o sertifikatas turi ECDSA arba pakankamai ilgą RSA raktą ir atsinaujina automatiškai. Orientyrą duoda BSI (Vokietijos federalinė informacijos saugumo tarnyba) gairės TR-02102-2 ir TLSRef Server-Side TLS rekomendacijos. Rezultatą patikrinkite iš išorės ir nepamirškite ryšių, kuriuos užmezga pats PHP.

Kodėl senos TLS nuostatos išgyvena taip ilgai

Naršyklėje yra spynelė, vadinasi, šifravimas sutvarkytas. Taip galvoja daugelis operatorių, todėl TLS konfigūracija dažnai metų metus nesikeičia. Ji tuomet kilusi iš serverio įrengimo laikų, nukopijuoto šablono ar valdymo skydelio numatytųjų reikšmių.

Problema ta, kad rekomendacijos keičiasi. Protokolų versijos keičiamos naujomis, metodai laikomi silpnais, atsiranda naujų rakto mainų metodų. BSI naujausią TR-02102 paskelbė versija 2026-01 nuo 2026-01-27 ir joje jau nurodo hibridinius postkvantinius metodus TLS 1.3. Kas savo nuostatų nežiūrėjo daug metų, labai tikėtina, nebėra naujausios būklės.

Kas dabar po PHP2Shell vis tiek tikrina serverius, TLS konfigūraciją gali peržiūrėti vienu prisėdimu. Ji PHP spragos neuždaro, bet priklauso kiekvienam tvarkingam sutvirtinimui.

Kuo remiasi gera TLS konfigūracija žiniatinklio serveriui

Du šaltiniai ypač naudingi operatoriams Europoje. BSI TR-02102 vertina kriptografinius metodus; 2 dalis nagrinėja TLS. Ji skirta pirmiausia kūrėjams ir planuotojams ir institucijoms bei reguliuojamoms sritims dažnai yra mastelis. Server-Side TLS rekomendacijos, anksčiau tvarkytos Mozilla wiki, dabar tęsiamos TLSRef ir pateikia konkrečius, nukopijuojamus profilius.

TLSRef 6.0 versijoje skiria du profilius:

Požymis Intermediate (daugumai svetainių) Modern
Protokolai TLS 1.2 ir TLS 1.3 tik TLS 1.3
Šifrų rinkiniai TLS 1.2 ECDHE su AES-GCM arba ChaCha20-Poly1305 jokių
Rakto mainų grupės X25519MLKEM768, X25519, prime256v1, secp384r1 kaip Intermediate
Sertifikatas rekomenduojamas ECDSA P-256 arba RSA 2048 bitų ECDSA P-256
Sertifikato galiojimas rekomenduojama 90 dienų, daugiausia 366 dienos 90 dienų
HSTS max-age dveji metai dveji metai

Viešoms svetainėms Intermediate yra įprastas atspirties taškas. Profilis atmeta labai senus įrenginius, bet apima dabartines naršykles ir operacines sistemas. Hibridinei grupei X25519MLKEM768 reikia naujos TLS bibliotekos. Prieš ją įrašydami patikrinkite, ar jūsų OpenSSL versija ją pažįsta.

Nginx ir Apache: saugus atspirties taškas

Toliau pateikti pavyzdžiai įgyvendina Intermediate profilį. Keliai yra vietos žymekliai, šifrų rinkinių sąrašas galioja TLS 1.2; TLS 1.3 turi savus saugius numatytuosius metodus.

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

Antras server blokas nuolat nukreipia nešifruotus kreipinius į HTTPS. Nukreipimas turėtų rodyti tiesiai į galutinį adresą, o ne eiti per kelias tarpines stotis. Po to patikrinkite ir įterptus išteklius: paveikslėliai, scenarijai ar šriftai, kurie dar kraunami per HTTP, naršyklėje sukelia įspėjimus arba yra blokuojami.

Nuostata, kad eiliškumą renkasi klientas, atitinka TLSRef rekomendaciją: visi siūlomi metodai laikomi saugiais, o įrenginiai be AES spartinimo taip gali pirmenybę teikti ChaCha20. Po kiekvieno pakeitimo konfigūraciją išbandykite (nginx -t arba apachectl configtest) ir tarnybą įkelkite iš naujo. Tinkamą HSTS antraštę ir kitus naršyklės nurodymus aprašo vadovas Svetainių saugumo antraštės.

Patarimas

Valdymo skydeliai, tokie kaip Plesk ar cPanel, savo sugeneruotuose failuose dažnai perrašo jūsų pakeitimus. TLS nuostatas ten nustatykite per skydelio numatytus nustatymus ar šablonus.

Sertifikatai: raktas, grandinė, atnaujinimas

Didelė dalis TLS problemų praktikoje neturi nieko bendra su šifrų rinkiniais, o susijusios su sertifikatais. Tipinės klaidos: nepilna grandinė, kai trūksta tarpinio sertifikato, pasibaigę sertifikatai šalutiniuose domenuose ir privatūs raktai su pernelyg plačiomis failų teisėmis.

Padeda trys taisyklės:

  1. Atnaujinkite automatiškai ir stebėkite atnaujinimą. Trumpos galiojimo trukmės, kokias rekomenduoja TLSRef, praktiškos tik su automatizavimu.
  2. Saugokite privačius raktus: skaitomi tik root ir žiniatinklio serverio procesui, niekada žiniatinklio šakniniame kataloge, niekada saugykloje (repository).
  3. Surinkite visus vardus: pagrindinis domenas, www, subdomenai parduotuvei, parengiamajai aplinkai (staging), pašto žiniatinklio sąsajai ir valdymo skydeliams.

Kas sertifikatus naudoja keliose vietose, pavyzdžiui, CDN, apkrovos paskirstytuve ir kilmės serveryje, turėtų vesti apžvalgą: kuris sertifikatas kur įdiegtas, kas jį atnaujina ir kada baigiasi. Be šios apžvalgos pasibaigęs sertifikatas dažnai pastebimas tik tada, kai pradeda skambinti klientai.

Kaip patikrinti konfigūraciją iš išorės

Šios komandos yra grynas tikrinimas ir nieko nekeičia. Pakeiskite pagrindinio kompiuterio vardą savu:

# TLS 1.3 ir TLS 1.2 turėtų veikti
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 turėtų nepavykti
openssl s_client -connect www.example.de:443 -servername www.example.de -tls1_1 </dev/null
# Pateikiamo sertifikato galiojimas ir savininkas
openssl s_client -connect www.example.de:443 -servername www.example.de </dev/null 2>/dev/null | openssl x509 -noout -subject -dates

TLS 1.1 bandymo nesėkmė gali reikšti ir tai, kad jūsų vietinė OpenSSL versija senojo protokolo apskritai nebesiūlo. Pilnai ataskaitai apie visus siūlomus metodus tinka specializuotas TLS skeneris. Tikrinkite kiekvieną subdomeną atskirai, nes jie dažnai veikia su savomis nuostatomis.

Pamirštama: TLS ten, kur pats PHP yra klientas

PHP programos pačios užmezga daug ryšių: su mokėjimo teikėjais, siuntų paslaugų teikėjais, sąsajomis, pašto serveriais ir duomenų bazėmis. Čia dažniausia klaida yra ne silpna nuostata, o išjungtas sertifikato tikrinimas, dažnai kaip greitas sprendimas kūrimo problemai.

<?php
// Saugu: sertifikatas ir pagrindinio kompiuterio vardas tikrinami (palikti numatytąjį elgesį)
$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);

Kode ieškokite CURLOPT_SSL_VERIFYPEER su false ir verify_peer srautų kontekstuose. Kiekviena rasta vieta praktiškai panaikina TLS apsaugą šiam ryšiui. Kur tarnybos yra už CDN, ir ruožas tarp CDN ir kilmės serverio turėtų naudoti galiojantį, patikrinamą sertifikatą. Kitų žiniatinklio serverio nuostatų PHP aplinkoms rasite straipsnyje Nginx saugus konfigūravimas PHP, viso sutvirtinimo mastelius straipsnyje CIS Benchmarks ir BSI moduliai.

Kaip PHP SOS padeda konkrečiai?

  • Surenkame visus pagrindinių kompiuterių vardus ir tarnybas su TLS, įskaitant valdymo skydelius, parengiamąsias aplinkas ir pašto žiniatinklio sąsajas.
  • Nuostatas sulyginame su TR-02102 ir tinkamu TLSRef profiliu ir dokumentuojame sąmoningus nukrypimus.
  • Sertifikatus perjungiame į automatinį atnaujinimą su stebėsena.
  • Programos kode ieškome išjungtų sertifikatų tikrinimų ir parodome pataisymą.

TLS yra mūsų PHP žiniatinklio serverių sutvirtinimo dalis; ryšį su dabartine padėtimi aiškina Kas yra PHP2Shell?.

Dažni klausimai

Ar vis dar turiu siūlyti TLS 1.0 ir TLS 1.1?

Paprastai ne. Dabartinės rekomendacijos, pavyzdžiui, TLSRef Intermediate profilis, kaip apatinę ribą nustato TLS 1.2. Kas senesnių protokolų reikia senoms įrangoms, turėtų tai nuspręsti sąmoningai, dokumentuoti ir apriboti atskira tarnyba.

Ar nemokamas sertifikatas mažiau saugus nei pirktas?

Šifravimui skirtumo nėra. Lemia rakto tipas, rakto ilgis, pilna sertifikatų grandinė ir patikimas automatinis atnaujinimas. Skirtumų yra tikrinimo apimtyje, galiojimo trukmėje ir teikėjo aptarnavime.

Ar pakanka HTTPS tarp lankytojo ir CDN?

Ne. Ir ryšys tarp CDN ir kilmės serverio turėtų būti šifruotas ir tikrinti kilmės sertifikatą. Kitu atveju duomenys antrame ruože keliauja tinklu nešifruoti arba netikrinti.

Ką TLS turi bendra su PHP2Shell?

Tiesiogiai nieko. TLS saugo duomenis jų perdavimo kelyje, o PHP2Shell paveikia PHP interpretatorių serveryje. Šifruotas ryšys patikimai perneša ir atakos užklausas, todėl PHP atnaujinimas lieka privalomas nepriklausomai nuo to.

Šaltiniai

Skubus kontaktas

Kiekviena valanda svarbi. Parašykite mums dabar.

Trumpai aprašykite sistemą, PHP versiją ir pastebėjimus. Mes atsakysime, išsiaiškinsime padėtį ir dirbsime nuotoliu, kol incidentas bus užbaigtas ir dokumentuotas.

Skubi pagalba