Dokumentacija

Izklopite TLS 1.0 in 1.1

Izklopite TLS 1.0 in 1.1

TLS je šifriranje pod vsako povezavo https://. Različici 1.0 (1999) in 1.1 (2006) imata znane slabosti in sta bili leta 2021 uradno upokojeni (RFC 8996). Vsi sodobni brskalniki ju ne uporabljajo več, PCI DSS, standard za kartična plačila, pa ju že leta ne dovoljuje. Strežnik, ki ju še sprejema, s tem ne pridobi nobenega obiskovalca; samo pade na varnostnih pregledih, revizijah plačilnih ponudnikov in strank, in pusti odprta šibkejša vrata.

Izklop je sprememba nastavitev strežnika, ne spletne strani. Kontrolni seznam strani se poskusi povezati s TLS 1.0 in 1.1 in opozori, če strežnik privoli.

Kaj pričakuje kontrolni seznam

Kaj naredi strežnik Rezultat
sprejme TLS 1.2 in 1.3, zavrne 1.0 in 1.1 OK
še vedno sprejme TLS 1.0 ali 1.1 opozorilo
ne ponuja ničesar novejšega od TLS 1.1 napaka: sodobni brskalniki strani sploh ne odprejo

Kdo izgubi dostop, ko ju izklopite: Internet Explorer na Windows 7 in starejših brez posodobitev, Android 4.3 in starejši ter zelo stari skripti ali naprave, ki kličejo vašo stran. V praksi nihče, ki danes obišče spletno stran v brskalniku.

Preverite sami

Namesto example.com vpišite svojo stran:

openssl s_client -connect example.com:443 -servername example.com -tls1   -cipher 'DEFAULT@SECLEVEL=0' </dev/null 2>&1 | grep -E 'Protocol|alert|Cipher is'
openssl s_client -connect example.com:443 -servername example.com -tls1_1 -cipher 'DEFAULT@SECLEVEL=0' </dev/null 2>&1 | grep -E 'Protocol|alert|Cipher is'
openssl s_client -connect example.com:443 -servername example.com -tls1_2 </dev/null 2>&1 | grep -E 'Protocol|Cipher is'

Popravljeno: prva dva se končata z napako, kot je alert protocol version ali Cipher is (NONE), tretji pa pokaže Protocol: TLSv1.2 (ali TLSv1.2 ob Cipher is). Če prvi ali drugi pokaže Protocol: TLSv1 ali TLSv1.1 s šifro, je stara različica še vklopljena.

-cipher 'DEFAULT@SECLEVEL=0' je pomemben: OpenSSL 3 stare različice zavrne že na svoji strani, kar bi bilo videti kot uspeh. Če vaš openssl odgovori no protocols available ali unknown option, starih različic sploh ne more preveriti; namesto tega uporabite nmap --script ssl-enum-ciphers -p 443 example.com, ki izpiše vse različice, ki jih strežnik sprejme.

Kako popraviti

To je nastavitev strežnika: WordPress ali kateri koli drug CMS je ne more spremeniti. Pri deljenem gostovanju gostitelja prosite, naj sprejema samo TLS 1.2 in 1.3; večina to že dela, ostali pa nastavitev spremenijo za ves strežnik. Sicer izberite tisto, do česar imate dostop.

cPanel

Pri deljenem gostovanju s cPanelom je to stvar gostitelja: podporo prosite, naj spletni strežnik omeji na TLS 1.2 in 1.3.

Z WHM (lasten strežnik ali VPS):

  1. Odprite Service Configuration → Apache Configuration → Global Configuration.
  2. V SSL/TLS Protocols vpišite -all +TLSv1.2 +TLSv1.3 (polje uporablja Apachejevo sintakso SSLProtocol). Ne sme vsebovati TLSv1 ali TLSv1.1.
  3. Save in Rebuild Configuration and Restart Apache.

Če strežnik namesto Apacheja poganja LiteSpeed Web Server, preverite tudi njegove nastavitve SSL in ga znova zaženite.

Plesk

Na Linuxu, kot skrbnik:

  1. Odprite Tools & Settings → SSL/TLS Ciphers (v nekaterih različicah pod Security).
  2. Označena pustite samo TLSv1.2 in TLSv1.3 in uveljavite.

Enako v ukazni vrstici:

plesk bin server_pref -u -ssl-protocols 'TLSv1.2 TLSv1.3'

V Plesku za Windows se protokoli nastavijo v samem Windowsu: glejte zavihek IIS.

DirectAdmin

Kot root nastavite profil TLS v CustomBuildu na Mozillin intermediate (TLS 1.2 in 1.3) in na novo zapišite konfiguracijo spletnega strežnika:

cd /usr/local/directadmin/custombuild
./build set ssl_configuration intermediate
./build rewrite_confs

nginx

Protokole nastavite v bloku http { … } datoteke /etc/nginx/nginx.conf (ista pot na Debianu, Ubuntuju, Rocky, Alma in CentOS):

http {
    ssl_protocols TLSv1.2 TLSv1.3;
}

Nato poiščite druge vrstice, ki to nastavitev povozijo:

grep -rn ssl_protocols /etc/nginx/ /etc/letsencrypt/options-ssl-nginx.conf 2>/dev/null

Vse vrstice ssl_protocols morajo navajati isto. nginx izbere protokol, še preden ve, katera stran je zahtevana, zato privzeti strežnik na vratih 443 odloča za vse strani na tem naslovu IP: ena stara vrstica tam pusti TLS 1.0 vklopljen za vse.

sudo nginx -t && sudo systemctl reload nginx

Apache in LiteSpeed

Z dostopom do strežnika (Apache). Na Debianu in Ubuntuju uredite /etc/apache2/mods-available/ssl.conf, na Rocky, Alma in CentOS pa /etc/httpd/conf.d/ssl.conf:

SSLProtocol -all +TLSv1.2 +TLSv1.3

Preverite, da je noben navidezni gostitelj ali vključena datoteka ne nastavi drugače (Certbotova /etc/letsencrypt/options-ssl-apache.conf jo nastavi):

grep -rn SSLProtocol /etc/apache2/ /etc/httpd/ /etc/letsencrypt/ 2>/dev/null
sudo apachectl configtest && sudo systemctl reload apache2

(Na Rocky, Alma in CentOS httpd namesto apache2.) Na teh sistemih od različice 8 naprej sistemska kriptografska politika TLS 1.0 in 1.1 že izključuje; če ju strežnik še sprejema, jo povozi izrecna vrstica SSLProtocol.

Brez dostopa do strežnika (deljeno gostovanje, LiteSpeed). TLS se v .htaccess ne da nastaviti. Vprašajte gostitelja.

Cloudflare

Ko stran teče skozi Cloudflare (oranžen oblak), se obiskovalci in kontrolni seznam povežejo s Cloudflarom, ne z vašim strežnikom.

  1. Odprite domeno in pojdite na SSL/TLS → Edge Certificates.
  2. Minimum TLS Version nastavite na TLS 1.2.

Vaš strežnik lahko stare različice še vedno sprejema za povezave mimo Cloudflara; popravite jih tudi tam, z zavihkom za vaš strežnik.

IIS in ASP.NET

Windows različice TLS nastavlja za ves strežnik (SCHANNEL), ne za posamezno stran. Najlažje je z brezplačnim orodjem IIS Crypto podjetja Nartac: uporabite predlogo Best Practices, preverite, da TLS 1.0 in 1.1 pod Server Protocols nista označena, in znova zaženite strežnik.

Ali pa ključe v registru nastavite sami v PowerShellu s skrbniškimi pravicami in nato znova zaženite strežnik:

foreach ($version in 'TLS 1.0', 'TLS 1.1') {
    $key = "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\$version\Server"
    New-Item -Path $key -Force | Out-Null
    New-ItemProperty -Path $key -Name Enabled -Value 0 -PropertyType DWord -Force | Out-Null
    New-ItemProperty -Path $key -Name DisabledByDefault -Value 1 -PropertyType DWord -Force | Out-Null
}

Opozorilo: Ti ključi vplivajo samo na povezave do tega strežnika. Pred ponovnim zagonom preverite, da nič drugega na njem (star SQL Server, Remote Desktop na nezakrpanem sistemu, stara aplikacija .NET) za dohodne povezave ni odvisno od TLS 1.0.

Gostovane platforme

Shopify, Wix, Squarespace in Webflow strežnike upravljajo sami in TLS 1.0 in 1.1 že zavračajo. Če kontrolni seznam tam pravi drugače, domena najverjetneje kaže nekam drugam (na star strežnik ali proxy).

Potrdite popravek

Znova poženite ukaze openssl iz razdelka Preverite sami, nato v PulseKeeperju odprite tarčo in na zavihku Kontrolni seznam kliknite Preveri zdaj.