16. října 2018 (aktualizováno 23. března 2021)

Společnosti Microsoft, Google, Apple i Mozilla včera shodně oznámily, že z jejich webových prohlížečů Internet Explorer, Edge, Chrome, Safari a Firefox počátkem v polovině roku 2020 odstraní protokoly TLS 1.0 a TLS 1.1. Návštěvníci vašeho webu už je pravděpodobně stejně nepoužívají a tak je můžete na serveru vypnout už dnes. Pojďme si to pomocí „Handshake Simulation“ v SSL Labs Server Testu ověřit.

Protokol TLS (Transport Layer Security) je základem HTTPS a jeho první verze vyšla v roce 1999. Byl to nástupce protokolu SSL 3.0 z roku 1996, ten už prohlížeče nepodporují tři roky a váš server by taky dávno neměl. Platební brány a weby pracující s platebními kartami nesmí TLS 1.0 používat od léta 2018.

Zahoďte TLS 1.0 a 1.1

Verze TLS 1.1 vyšla o pár let později, v roce 2006, ale podobně jako TLS 1.0 používá překonané algoritmy MD5 a SHA-1. TLS verze 1.0 ani 1.1 prohlížeče běžně už nepoužívají:

  • Google tvrdí, že s těmito protokoly je v Chrome uskutečněno jen 0,5 % HTTPS spojení (Na začátku ledna 2020 už jen 0,3 %), od verze 72 se navíc v developer tools objevuje varování při použití TLS 1.0 nebo 1.1, od 79 budou stránky načtené pomocí těchto protokolů označené jako „Not secure“ (nastavení můžete změnit na chrome://flags/#show-legacy-tls-warnings) a finálně přestanou být podporovány v Chrome 83, který by měl vyjít v půlce května 2020 (prohlížeč zobrazí celostránkovou chybu – nazývanou „interstitial“ – s kódem NET::ERR_SSL_OBSOLETE_VERSION, která zatím půjde „prokliknout“)
    The connection used to load resources from https://tls-v1–0.badssl.com:1010 used TLS 1.0 or TLS 1.1, which are deprecated and will be disabled in the future. Once disabled, users will be prevented from loading these resources. The server should enable TLS 1.2 or later. See https://www.chromestatus.com/feature/5654791610957824 for more information.

    Varování v Chrome 72, vyzkoušejte si ho na odkazech z badssl.com

  • V Edge je to prý 0,72 %, Microsoft odstraní podporu pro TLS 1.0 a 1.1 nejdříve v Edge 84 v červenci 2020, v IE 11 a v Edge Legacy (což je Edge před přechodem na Chromium) ji odstraní 8. září, v obojím to půjde stále ručně zapnout zpět
  • V Safari údajně 0,36 %
  • Firefox uskuteční 1,11 % všech HTTPS spojení pomocí TLS 1.0 a 0,09 % pomocí TLS 1.1, od verze 74 (vyšla 10. března 2020) se navíc při pokusu o načtení stránky pomocí TLS 1.0 nebo 1.1 zobrazí celostránková chyba s kódem SSL_ERROR_UNSUPPORTED_VERSION a tlačítkem pro povolení těchto zastaralých protokolů – pro opětovné zakázání musíte v about:config nastavit security.tls.version.enable-deprecated na false kvůli pandemii virové choroby COVID-19 a nepřipravenosti státních webů po celém světě (včetně webu českého Ministerstva zdravotnictví, který sice HTTPS umí, ale návštěvníky na něj naštěstí nepřesměrovává) byla tahle změna zase na chvíli vrácena zpět a do prohlížeče se dostala později

Pokud server tyto protokoly stále podporuje, tak hrozí, že útočník donutí prohlížeč použít je namísto bezpečného TLS 1.2 nebo TLS 1.3, ačkoliv moderní browsery takový „fallback“ odstranily již před několika lety (v Chrome 50, Firefox 37). Bylo by tedy vhodné je na serveru zakázat, od března 2021 to dokonce „nařizuje“ RFC 8996, ale předtím je dobré si zjistit, jaké prohlížeče tyto protokoly vyžadují. Už jich moc není, v seznamu nenajdete ani jeden moderní browser.

Handshake simulation

Prohlížeče, které se po vypnutí TLS 1.0 a 1.1 na váš server nepřipojí, můžete zjistit třeba otestováním vlastního webu pomocí nástroje SSL Labs Server Test. Do políčka Hostname zadejte vaší doménu, stiskněte Submit a chvíli počkejte na dokončení testu.

Známka A+ v SSL Labs Server Testu

Můj web dostal v hodnocení známku A+, nejlepší možnou, jak překvapivé

Test vyzkouší nastavení HTTPS na vašem webu, ten by měl ideálně získat známku A nebo A+, kterou od ledna 2020 dostanete pouze pokud máte staré TLS zakázané. Na hodnocení má vliv několik nastavení, které jsem se pokusil krátce vysvětlit ve své přednášce o SSL Labs. Ale tenhle článek není o známkách, níže se budu věnovat převážně jen protokolům TLS.

Ve výsledcích pod informacemi o certifikátech začíná sekce Configuration. V ní uvidíte, které protokoly server podporuje a v části Handshake Simulation jsou uvedeny testované prohlížeče, protokoly a šifry, které ke spojení používají.

Handshake Simulation ve výsledcích SSL Labs Server Testu

Část výsledků simulace prohlížečů pro náhodný web

„Handshake“ je počáteční část HTTPS spojení, během které se prohlížeč a server domluví na tom, jaké protokoly, šifry a šifrovací klíče budou používat. SSL Labs zkouší simulovat cca 50 různých prohlížečů a výsledky této domluvy pak zobrazí v přehledné tabulce.

Řádek po řádku

Pojďme si rozebrat třeba hned ten první řádek, do detailů kryptografie ale zacházet nebudeme, nebojte:

Android 2.3.7 No SNI² RSA 2048 (SHA1) TLS 1.0 TLS_RSA_WITH_AES_128_CBC_SHA No FS
Android 2.3.7
Simulovaný prohlížeč (obecně HTTPS klient) a verze
No SNI2
Poznámka, která v tomto případě říká, že Android 2.3.7 nepodporuje SNI (Server Name Indication), což je technologie dovolující na jedné IP adrese provozovat více webů na HTTPS, každý s vlastním certifikátem (ta „2“ v „SNI2“ je jen odkaz na poznámku pod čarou) – ve finále to znamená, že pokud chcete podporovat i takto staré Androidy, tak pro váš web musíte mít vyhrazenou IP adresu
RSA 2048 (SHA1)
RSA znamená spoustu věcí, v tomto případě ale označuje typ certifikátu a soukromého klíče, 2048 pak velikost toho klíče a SHA1 algoritmus použitý pro podpis certifikátu, který by se již běžně používat neměl
TLS 1.0
Použitý šifrovací protokol ve verzi, které se zrovna náhodou chceme zbavit
TLS_RSA_WITH_AES_128_CBC_SHA
Použitá šifra, přesněji „cipher suite“, která určuje, jak proběhne výměna klíčů a jaký šifrovací algoritmus se použije
No FS
„FS“ znamená Forward Secrecy a test nám zde naznačuje, že „cipher suite“ se tímto označením nemůže pyšnit a že pokud by mizera získal soukromý klíč ze serveru, tak by mohl rozšifrovat již proběhlou zaznamenanou komunikaci i tu, která teprve proběhne

A teď ten poslední řádek z předchozího obrázku:

Android 7.0 EC 256 (SHA256) TLS 1.2 > h2 TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 ECDH x25519 FS
Android 7.0
O dost novější verze, že
EC 256 (SHA256)
Byl použit certifikát i soukromý klíč využívající Elliptic-curve cryptography, EC klíče i certifikáty jsou o dost menší (klíč má „jen“ 256 bitů) a zpracovávají se rychleji, podpora je také výborná (já na svém webu používám už jenom EC certifikáty); SHA256 je pak označení pro podpisový algoritmus z rodiny hashovacích funkcí SHA-2, která by se pro certifikáty měla používat
TLS 1.2 > h2
Spojení proběhlo pomocí TLS 1.2, „> h2“ naznačuje, že bylo využito protokolu HTTP/2
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
Použitá šifra, resp. „cipher suite“
ECDH x25519
Upřesnění výměny klíčů v dané „cipher suite“, který proběhla pomocí algoritmu Elliptic-curve Diffie–Hellman s eliptickou křivkou označovanou jako X25519
FS
„Cipher suite“ podporuje Forward Secrecy, takže mizera, který se dostane k soukromému klíči ze serveru nedokáže minulou ani budoucí komunikace dešifrovat

Pohledem na všechny řádky zjistíte, který prohlížeč by použil TLS 1.0 nebo 1.1. Pokud takové prohlížeče již nechcete nebo nemusíte podporovat, tak tyto zastaralé protokoly v konfiguraci vašeho serveru vypněte. Nedávno to udělal např. i Slevomat, viz výsledky testu. A když to mohl vypnout Slevomat, tedy komerční web pro velmi širokou veřejnost, tak vy můžete nejspíš také. Správce serveru by to měl zvládnout, v Apache k tomu slouží direktiva SSLProtocol, v nginx ssl_protocols.

Nepodporované prohlížeče

Na konci sekce Handshake Simulation najdete pod hlavičkou Not simulated clients (Protocol mismatch) prohlížeče, které se v defaultním nastavení chtěly připojit již nepodporovaným protokolem. Pro můj web ta podstatná část vypadá takto, přičemž na obrázku chybí ještě stará Java, knihovna OpenSSL z dob, kdy se po Zemi ještě proháněli dinosauři a Safari verze 5 a 6 na OS X:

Not simulated clients (Protocol mismatch)

Na můj web se nepřipojí ani Chrome 49 na Windows XP, protože ten by potřeboval RSA certifikát, který jsem přestal používat. Pokud browser zvládne TLS 1.2, tak zvládne i EC certifikát, s touhle jedinou výjimkou, takže je můžete v klidu používat. Pokud byste stále potřebovali podporovat i Chrome na Windows XP, tak můžete použít oba typy certifikátů zároveň, pokud to váš server umí a Apache i nginx to umí.

Vypněte nepoužívané věci

Když už budete v tom vypínání starých TLS, tak stejně můžete postupovat u „cipher suites“. SSL Labs Server Test některé „cipher suites“ označí jako slabé („weak“), některé dokonce jako „insecure“, ale pokud je žádný vámi podporovaný prohlížeč nepoužívá, tak je z konfigurace serveru můžete také odstranit. Můj server nabízí jen 5 „cipher suites“, konfiguraci jsem převzal z generátoru od Mozilly, přičemž jsem použil profil „Modern“.

Pokud se o HTTPS zajímáte ještě víc, tak vás rád přivítám na dalším termínu mého školení HTTPS (nejbližší termín: termín zatím nevypsán).


Mohlo by vás také zajímat

Aktualizace článku

23. března 2021 RFC 8996 formálně „vypíná“ TLS 1.0 a 1.1

2. dubna 2020 Upřesnění datumů u Chrome a Edge

15. března 2020 Vyšel Firefox 74, při načtení stránek pomocí starého TLS zobrazí chybu tak už zase nezobrazí

1. února 2020 SSL Labs hodnotí servery s povoleným TLS 1.0 nebo 1.1 známkou B nebo horší

14. ledna 2020 Chrome flag pro zobrazování Not secure při použití zastaralé verze TLS

5. listopadu 2019 TLS 1.0 a 1.1 budou z Chrome odstraněny ve verzi 81

30. ledna 2019 Chrome 72 varuje při použití TLS 1.0 nebo TLS 1.1

Michal Špaček

Michal Špaček

Vyvíjím webové aplikace, zajímá mě jejich bezpečnost. Nebojím se o tom mluvit veřejně, hledám hranice tak, že je posouvám. Chci naučit webové vývojáře stavět bezpečnější a výkonnější weby a aplikace.

Veřejná školení

Zvu vás na následující školení, která pořádám a vedu: