Hlavní navigace

Maximální délka platnosti HTTPS certifikátů bude zkrácena na 1 rok

24. 2. 2020
Doba čtení: 5 minut

Sdílet

Apple udělal to, co většina certifikačních autorit udělat nechtěla: zkrátil maximální platnost vydávaných certifikátů na jediný rok. Certifikáty s delší dobou platnosti to tak mají vlastně za sebou.

Apple tento týden na setkání zástupců certifikačních autorit a prohlížečů CA/B Forum v Bratislavě oznámil, že od 1. září tohoto roku bude maximální délka platnosti TLS certifikátů v Safari (a nejspíš i v celém macOS a iOS a všech aplikacích na nich spuštěných) pouze 1 rok, přesněji 398 dní. A to je skvělé, ale proč vlastně?

Apple tedy efektivně udělal to, co většina certifikačních autorit udělat nechtěla: zkrátil maximální platnost vydávaných certifikátů na cca rok. A ačkoliv ostatní browsery o zkrácení neuvažují (zatím?), tak certifikáty s delší platností to mají v podstatě za sebou.

Co se dozvíte v článku
  1. Jak to bylo dřív
  2. Zneplatnění certifikátů (nefunguje)
  3. EV certifikáty (nechcete)
  4. Logy Certificate Transparency
  5. Chceme krátkou platnost

Jak to bylo dřív

Maximální délka platnosti TLS certifikátů v prohlížečích je dnes 825 dní (2 roky a něco), do března 2018 byla 39 měsíců (tři a čtvrt roku) a kdysi dávno jste mohli mít certifikát platný třeba 5 let nebo 10 let. Tzv. EV certifikáty měly vždy maximální platnost 2 roky (825 dní od března 2018, předtím 27 měsíců).

V září 2019 neprošel návrh na zkrácení platnosti všech typů certifikátů na 398 dní. Všechny prohlížeče zastoupené v CA/B Forum sice byly pro, ale z certifikačních autorit se ten nápad zalíbil jen třetině, což na schválení nestačilo. Ale i přesto se některé certifikační autority zavázaly, že platnost zkrátí dobrovolně. Certifikační autorita Let's Encrypt již od svého vzniku vydává certifikáty s maximální platností 90 dní (a doporučují obnovu po 60 dnech).

Apple to tedy vzal od lesa a pokud budete chtít, aby vašemu certifikátu s platností od 1. září 2020 důvěřovalo Safari (a nejspíš i všechny další prohlížeče na macOS i iOS), tak bude muset být vystaven jen na rok maximálně. Omezení platnosti v prohlížečích se tak nějak očekávalo, ale osobně jsem sázel spíš na Chrome.

Zneplatnění certifikátů (nefunguje)


Zkracovat maximální délku platnosti certifikátů je obecně dobrý nápad z několika důvodů: tím hlavním je asi to, že některé prohlížeče platnost certifikátů vlastně nekontrolují.

Zkuste si to sami na revoked.badssl.com – mně se stránka ve Firefoxu ( SEC_ERROR_REVOKED_CERTIFICATE) a Chrome ( NET::ERR_CERT_REVOKED) na Windows i iOS nenačte, na Androidu v obojím však ano. Před nedávnem se mi ale načítala i v Chrome na Windows i přesto, že certifikát byl zneplatněn („revokován“) v podstatě hned po jeho vydání.

Pro kontrolu platnosti by prohlížeče musely stahovat tzv. CRL seznamy (Certificate Revocation List), které mohou být docela velké a načítání stránky by se zbytečně prodlužovalo, což by mohlo vést k vypneme HTTPS a bude to rychlejší! Browsery by také mohly posílat dotaz na platnost certifikátu na OCSP (Online Certificate Status Protocol) servery, které ale zrovna nemusí fungovat a co pak. Zobrazit stránku, nebo nezobrazit, to je oč tu běží.

Další možností je OCSP Stapling, kdy na planost certifikátu se zeptá rovnou server a odpověď poté po následujících X dní „přicvakává“ k certifikátu, takže browser s certifikátem dostane rovnou i informaci o tom, jestli platí, nebo ne. Jenže se na to nedá spolehnout, nelze použít rozšíření TLS Feature (OCSP Must Staple), protože třeba takový nginx v klidu pošle odpověď bez OCSP statusu, pokud ji ještě nestáhl.

A tak místo toho prohlížeče používají vlastní push update technologie na kontrolu platnosti. Firefox má OneCRL (a nově CRLite), Chrome má CRLSets, ale v nich nemusí být všechny zneplatněné certifikáty.

Takže nejjistější je počkat do konce platnosti certifikátu a nový vyrobit s novými klíči. A je o dost velký fous lepší čekat maximálně rok, než čekat maximálně dva roky. Ale i ten rok je pořád hodně a v již nastoleném trendu zkracování maximální platnosti bychom měli i nadále pokračovat.

EV certifikáty (nechcete)

S tou kontrolou platnosti je to trochu složitější, každý browser to (ne)dělá jinak a jsou i podstatné rozdíly mezi EV a DV certifikáty. Pro detaily a grafy a měření koukněte na článek Aarona Peterse.

Z něj mimochodem vyplývá, že tzv. „zelené“ EV certifikáty používat nechcete, protože kromě toho, že to jsou vyhozené peníze (browsery je na první pohled zobrazí jako DV certifikáty a název firmy, kdysi zobrazovaný hned vedle adresy stránky, je vidět až po kliknutí), tak vám to ještě zpomalí načítání webu.

Chrome totiž pokaždé, když načítá stránku s EV certifikátem, posílá dotaz na OCSP, i když se používá OCSP Stapling. Firefox platnost online neověřuje při použití OCSP Staplingu za podmínky, že platnost online ověřil nedávno.

Pro úplnost: Chrome se v případě DV certifikátů nikdy nedotazuje certifikační autority na platnost, Firefox se neptá pokud DV certifikát má „přicvaknutý“ status. OCSP Stapling ❤

Logy Certificate Transparency


Dalším důvodem pro krátkou platnost je Certificate Transparency, systém logování HTTPS certifikátů. Každý certifikát musí být ve dvou nebo více (také podle délky platnosti) lozích, aby ho Chrome vůbec přijal, ale co když některý log bude zneplatněn, jako se již v minulosti stalo?

Log nebude zneplatněn hned, ale třeba až za půl roku od oznámení vyřazení ze seznamu známých logů. S delší platností je ale pravděpodobnější, že log bude vyřazen ještě během platnosti certifikátu, čímž ho vlastně zneplatní, protože certifikát již nebude splňovat pravidla prohlížečů.

Další důvody pro kratší platnost popisuje Scott Helme: změna podpisových algoritmů, výměna klíčů apod.

Chceme krátkou platnost

Takže suma sumárum, certifikáty s krátkou platností chceme a Apple teď „zařídil“ zkrácení na jeden rok, děkujeme. Kupovat certifikáty s platností dva roky už nemá moc cenu a ač to dělat stále můžete, tak od září to dělat nechcete. Byly by to vyhozený prachy a to je raději můžete dát za… třeba za účast na školení HTTPS u Špačka nebo školení HTTPS u Krčmáře nebo třeba za pivo. Nebo za všechno dohromady.

Osobně používám 90denní certifikáty od Let's Encrypt a automatizovaně (to je důležité) je obnovuji tři týdny před koncem jejich platnosti (to taky, protože kdyby automatizace selhala, a že se to občas převážně mojí vinou stane, tak pořád mám pár týdnů na opravu) a používám OCSP Stapling. Pro získání certifikátů používám Certbot (podporuje různý Linuxy a Unixy a nově existuje i beta verze pro Windows), který volám ze svého wrapperu.

UX DAy - tip 2

A víte o tom, že existoval návrh na „STAR“ (Short Term Auto Renewed) certifikáty s platností pár hodin až maximálně pár týdnů?

Napsáno původně pro autorův blog.

Byl pro vás článek přínosný?

Autor článku

Michal Špaček je vývojář, školitel, přednášející a občasný lovec chyb. Umí vyvíjet webové aplikace, zajímá se především o jejich bezpečnost a výkon.