Vypněte TLS 1.0 a 1.1 už dnes

Společnosti Microsoft, Google, Apple i Mozilla shodně oznámily, že z jejich webových prohlížečů Internet Explorer, Edge, Chrome, Safari a Firefox počátkem 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.
Nálepky:
Text vyšel původně na webu autora.
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í TLS1.0 používat od letošního léta.
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í
- V Edge je to prý 0,72 %
- 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
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. Bylo by tedy vhodné je na serveru zakázat, 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.
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 ale aktuálně dostanete i když máte staré TLS povolené. 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í.
Čá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
- 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
- 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:
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 (13. prosince 2018 Praha).