Dokumentacja
Wyłącz TLS 1.0 i 1.1
Wyłącz TLS 1.0 i 1.1
TLS to szyfrowanie pod każdym połączeniem https://. Wersje 1.0 (1999) i 1.1 (2006) mają znane słabości i w 2021 roku zostały oficjalnie wycofane (RFC 8996). Wszystkie aktualne przeglądarki przestały ich używać, a PCI DSS, standard płatności kartami, od lat ich nie dopuszcza. Serwer, który nadal je akceptuje, nie zyskuje na tym żadnych odwiedzających; jedynie oblewa skany bezpieczeństwa, audyty operatorów płatności i klientów, i zostawia otwarte słabsze drzwi.
Wyłączenie to zmiana konfiguracji serwera, a nie strony. Lista kontrolna strony próbuje połączyć się przez TLS 1.0 i 1.1 i ostrzega, gdy serwer się zgadza.
Czego oczekuje lista kontrolna
| Co robi serwer | Wynik |
|---|---|
| akceptuje TLS 1.2 i 1.3, odrzuca 1.0 i 1.1 | OK |
| nadal akceptuje TLS 1.0 lub 1.1 | ostrzeżenie |
| nie oferuje niczego nowszego niż TLS 1.1 | błąd: aktualne przeglądarki w ogóle nie otworzą strony |
Kto traci dostęp po wyłączeniu: Internet Explorer na Windows 7 i starszych bez aktualizacji, Android 4.3 i starsze oraz bardzo stare skrypty lub urządzenia, które łączą się z Twoją stroną. W praktyce nikt, kto dziś odwiedza stronę w przeglądarce.
Sprawdź sam
Zamiast example.com wpisz swoją stronę:
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'
Po naprawie: dwa pierwsze kończą się błędem typu alert protocol version lub Cipher is (NONE), a trzecie pokazuje Protocol: TLSv1.2 (lub TLSv1.2 przy Cipher is). Jeśli pierwsze lub drugie pokazuje Protocol: TLSv1 lub TLSv1.1 z szyfrem, stara wersja jest nadal włączona.
-cipher 'DEFAULT@SECLEVEL=0' jest ważne: OpenSSL 3 odrzuca stare wersje już po swojej stronie, co wyglądałoby jak sukces. Jeśli Twój openssl odpowiada no protocols available lub unknown option, w ogóle nie potrafi sprawdzić starych wersji; użyj zamiast tego nmap --script ssl-enum-ciphers -p 443 example.com, które wypisuje każdą wersję akceptowaną przez serwer.
Jak to naprawić
To ustawienie serwera: WordPress ani żaden inny CMS go nie zmieni. Na hostingu współdzielonym poproś hosta, by akceptował tylko TLS 1.2 i 1.3; większość już tak robi, a pozostali zmieniają to dla całego serwera. W przeciwnym razie wybierz to, do czego masz dostęp.
cPanel
Na hostingu współdzielonym z cPanelem to sprawa hosta: poproś wsparcie o ograniczenie serwera WWW do TLS 1.2 i 1.3.
Z WHM (własny serwer lub VPS):
- Otwórz Service Configuration → Apache Configuration → Global Configuration.
- W SSL/TLS Protocols wpisz
-all +TLSv1.2 +TLSv1.3(pole używa składniSSLProtocolz Apache). Nie może zawieraćTLSv1aniTLSv1.1. - Save i Rebuild Configuration and Restart Apache.
Jeśli serwer zamiast Apache działa na LiteSpeed Web Server, sprawdź też jego ustawienia SSL i uruchom go ponownie.
Plesk
Na Linuksie, jako administrator:
- Otwórz Tools & Settings → SSL/TLS Ciphers (w niektórych wersjach w sekcji Security).
- Zostaw zaznaczone tylko TLSv1.2 i TLSv1.3 i zastosuj.
To samo z wiersza poleceń:
plesk bin server_pref -u -ssl-protocols 'TLSv1.2 TLSv1.3'
W Plesku dla Windows protokoły ustawia się w samym Windows: zobacz zakładkę IIS.
DirectAdmin
Jako root ustaw profil TLS w CustomBuild na intermediate Mozilli (TLS 1.2 i 1.3) i przepisz konfigurację serwera WWW:
cd /usr/local/directadmin/custombuild
./build set ssl_configuration intermediate
./build rewrite_confs
nginx
Ustaw protokoły w bloku http { … } pliku /etc/nginx/nginx.conf (ta sama ścieżka na Debianie, Ubuntu, Rocky, Alma i CentOS):
http {
ssl_protocols TLSv1.2 TLSv1.3;
}
Potem poszukaj innych linii, które to nadpisują:
grep -rn ssl_protocols /etc/nginx/ /etc/letsencrypt/options-ssl-nginx.conf 2>/dev/null
Każda linia ssl_protocols musi mówić to samo. nginx wybiera protokół, zanim wie, o którą stronę chodzi, więc domyślny serwer na porcie 443 decyduje za wszystkie strony na tym adresie IP: jedna stara linia tam zostawia TLS 1.0 włączone dla wszystkich.
sudo nginx -t && sudo systemctl reload nginx
Apache i LiteSpeed
Z dostępem do serwera (Apache). Na Debianie i Ubuntu edytuj /etc/apache2/mods-available/ssl.conf, na Rocky, Alma i CentOS /etc/httpd/conf.d/ssl.conf:
SSLProtocol -all +TLSv1.2 +TLSv1.3
Sprawdź, czy żaden wirtualny host ani dołączony plik nie ustawia tego inaczej (Certbotowy /etc/letsencrypt/options-ssl-apache.conf to ustawia):
grep -rn SSLProtocol /etc/apache2/ /etc/httpd/ /etc/letsencrypt/ 2>/dev/null
sudo apachectl configtest && sudo systemctl reload apache2
(Na Rocky, Alma i CentOS httpd zamiast apache2.) Na tych systemach od wersji 8 systemowa polityka kryptograficzna już wyklucza TLS 1.0 i 1.1; jeśli serwer nadal je akceptuje, nadpisuje ją jawna linia SSLProtocol.
Bez dostępu do serwera (hosting współdzielony, LiteSpeed). TLS nie da się ustawić w .htaccess. Zapytaj hosta.
Cloudflare
Gdy strona działa przez proxy Cloudflare (pomarańczowa chmurka), odwiedzający i lista kontrolna łączą się z Cloudflare, a nie z Twoim serwerem.
- Otwórz domenę i przejdź do SSL/TLS → Edge Certificates.
- Ustaw Minimum TLS Version na TLS 1.2.
Twój serwer może nadal akceptować stare wersje dla połączeń z pominięciem Cloudflare; popraw to też tam, w zakładce dla swojego serwera.
IIS i ASP.NET
Windows ustawia wersje TLS dla całego serwera (SCHANNEL), a nie dla pojedynczej strony. Najprościej darmowym narzędziem IIS Crypto firmy Nartac: zastosuj szablon Best Practices, upewnij się, że TLS 1.0 i 1.1 w Server Protocols są odznaczone, i uruchom serwer ponownie.
Albo ustaw klucze rejestru sam w PowerShellu z uprawnieniami administratora, a potem uruchom serwer ponownie:
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
}
Ostrzeżenie: Te klucze dotyczą tylko połączeń do tego serwera. Przed ponownym uruchomieniem upewnij się, że nic innego na nim (stary SQL Server, Remote Desktop na niezałatanym systemie, stara aplikacja .NET) nie zależy od TLS 1.0 dla połączeń przychodzących.
Platformy hostowane
Shopify, Wix, Squarespace i Webflow same zarządzają serwerami i już odrzucają TLS 1.0 i 1.1. Jeśli lista kontrolna mówi tam co innego, domena najpewniej wskazuje gdzie indziej (na stary serwer lub proxy).
Potwierdź poprawkę
Uruchom ponownie polecenia openssl z sekcji Sprawdź sam, potem otwórz cel w PulseKeeper i kliknij Sprawdź teraz na zakładce Lista kontrolna.