Jak ignorovat NET::ERR_CERT_DATE_INVALID (tolerance data)?

Dobrý den, nefungují mi některé https stránky, pokud mám nastavený jiný systémový čas (chrome hlásí NET::ERR_CERT_DATE_INVALID). Chtěl bych znát trochu mechanismus, proč to tak je (mám o tom jen mírné znalosti), jestli to souivisí s forward secrecy a vysvětlení z kryptografického Hlediska .

Dál bych chtěl vědět, praktické info, jestli to je vynucené serverem a prostě bez správného času nejde komunikovat přes https a nebo je to jen "varování" klienta, které lze potlačit. A jak to udělat v chromium??? Tam žádný checkbox na ignoraci není, v Mozille, FF, TB, IE Je.
Kód: [Vybrat]
Aby bylo možné navázat zabezpečené spojení, hodiny musejí být nastaveny správně. Důvodem je, že certifikáty, pomocí kterých se weby identifikují, platí pouze pro pevně daná období. Jelikož hodiny v zařízení nejsou nastaveny správně, prohlížeč Chromium tyto certifikáty nemůže ověřit.

Pak ještě odbočka, ukazuje se toto varování (a je možné se spojit), jen v případě, že datum je nastavené mimo platnost certifikátu a nebo stačí, i když se liší(ale je uvnitř platnosti certifikátu).

Nakonec bych chtěl vědět, jak probíhá komunikace TLS, normálně, když mám datum správné a certifikát se přijme a pak když například v programu wget dám --no-check-certificate, jaké jsou v tom rozdíly. Předpokládám, že šifrování se stále používá.
« Poslední změna: 26. 05. 2019, 21:43:12 od Petr Krčmář »


Re:jak ignorovat NET::ERR_CERT_DATE_INVALID (tolerance data)
« Odpověď #1 kdy: 26. 05. 2019, 11:17:20 »
Každý certifikát má nastavené nějaké období, během kterého je platný. Je to z důvodu větší bezpečnosti – bezpečnost certifikátů jednak závisí na tom, že neunikne privátní klíč, jednak na tom, že použitý algoritmus je dostatečně odolný. Jenže v algoritmech se nalézají chyby, a také neustále roste výkon počítačů, takže co bylo před pár lety nemožné louskat hrubou silou, dnes už je prakticky proveditelné. Proto se v počítačové kryptografii všude počítá s omezenou platností podpisů (a tím i certifikátů).

Další problém je, že u certifikátů se ověřuje, zda nebyly odvolány. A odvolání certifikátu je zase určené časem. Když si posunete čas dozadu, může se stát, že útočník získá privátní klíč, právoplatný majitel to zjistí a certifikát odvolá – váš prohlížeč by mu ale dál důvěřoval, protože k odvolání by podle něj mělo dojít až v budoucnosti.

Jedná se „jenom“ o varování klienta – klient při navázání spojení kontroluje, zda jde o platný a důvěryhodný certifikát. A certifikát je platný jenom v období, které je v něm nastavené – přičemž klient nemá lepší zdroj aktuálního času, než jsou hodiny počítače*). Když potlačíte varování klienta o tom, že certifikát je mimo dobu platnosti, může vám útočník podstrčit starý certifikát, od kterého nějak získal privátní klíč – buď si na něj jeho vlastník nedával pozor, protože byl od starého certifikátu, nebo byl použitý nějaký slabý algoritmus, a útočník dokázal klíč upočítat. (Ta druhá varianta by v moderním prohlížeči neprošla, protože prohlížeče odmítají i certifikáty se slabými algoritmy). A nebo může nastat ta třetí nejhorší varianta – certifikát by byl ještě platný, ale byl odvolán, protože je podezření na únik privátního klíče – ale váš prohlížeč bude v klidu, protože k odvolání dojde až v budoucnosti.

Když dáte u wgetu --no-check-certificate, určitě se nekontroluje, zda je certifikát od důvěryhodné autority, je možné, že se nekontroluje ani datum platnosti certifikátu a nejspíš ani shoda jména na certifikátu se jménem serveru. Takže komunikace je sice šifrovaná, ale možná komunikujete hezky šifrovaně s útočníkem, protože vám podstrčil svůj certifikát.

Nevím, jestli jde tahle kontrola potlačit v Chromiu – ono to obecně není moc dobrý nápad umožnit neznalým uživatelům tyhle kontroly potlačovat, protože uživatel se chce hlavně dostat na web, tak odklikne cokoli, a je mu jedno, že se připojuje na web útočníka. Nejlepší je nehrát si se systémovým časem a mít ho seřízený podle skutečného přesného času.

*) Resp. jak je vidět z té hlášky, Chromium si asi v případě nesouladu ověří čas i odjinud, ale nedělá to pro každý certifikát, protože by to zpomalovalo načítání stránek. A ten čas zjištěný odjinud použije jen pro správnou formulaci chybové hlášky, nepřebije to systémový čas použitý pro validaci certifikátu.

Re:Jak ignorovat NET::ERR_CERT_DATE_INVALID (tolerance data)?
« Odpověď #2 kdy: 27. 05. 2019, 08:37:51 »
Ještě doplním, že ověřování platnosti certifikátů (a tím pádem potřeba správného času) není jen záležitostí webových prohlížečů. Dnes spousta aplikací na pozadí komunikuje přes HTTPS, kde se zase ověřují certifikáty. Certifikáty se používají v DNSSEC, takže se zapnutou podporou DNSSEC a špatným časem se vám nebudou překládat domény používající DNSSEC. Certifikáty se používají pro podpis aplikací a ovladačů. Můžete je použít u SSH nebo VPN. Zkrátka mít na počítači nastavený špatný čas je špatný nápad a hlášky prohlížeče jsou jen vrcholek ledovce.

Re:Jak ignorovat NET::ERR_CERT_DATE_INVALID (tolerance data)?
« Odpověď #3 kdy: 30. 05. 2019, 09:07:35 »
No a to je právě to.  Předpokládám, že u DNSSEC je to stejné, že s jiným časem tedy nelze zaručit tu autenticitu a klidně mohu komunikovat s někým jiným jiným. Chci, aby mi to fungovalo i s jiným časem (se všemi riziky). Ale chci mít možnost, aby to fungovalo i takto a ne že, když budu mít jiné datum, tak v rámci bezpečnosti "nenavážu ani bajt".

O jaké DNSSEC klienty jde? systémové? v prohlížečích? je na to nějaký flag jako výše?

Re:Jak ignorovat NET::ERR_CERT_DATE_INVALID (tolerance data)?
« Odpověď #4 kdy: 30. 05. 2019, 11:26:18 »
O jaké DNSSEC klienty jde?
O všechny.

Ale chci mít možnost, aby to fungovalo i takto a ne že, když budu mít jiné datum, tak v rámci bezpečnosti "nenavážu ani bajt".
Že považujete za dobrý nápad střelit se do vlastní nohy, to je vaše věc. Ale nečekejte, že budou ostatní vymýšlet, jak byste to měl nejlépe udělat. Pokud chcete dělat hlouposti, musíte si na to přijít sám, jak je dělat.

je na to nějaký flag jako výše?
Nedá se vyloučit, že se to nějakému vývojáři hodilo pro nějaké jiné účely, tak si to pro sebe implementoval. Ale moc bych na to nespoléhal. Platí, co jsem napsal výše – když chcete dělat hlouposti, budete si to muset odpracovat sám.


Re:Jak ignorovat NET::ERR_CERT_DATE_INVALID (tolerance data)?
« Odpověď #5 kdy: 02. 06. 2019, 17:43:02 »
Docela by mě zajímal usecase pro špatně nastavený systémový čas.
Napadá mě jen kradený soft..

Re:Jak ignorovat NET::ERR_CERT_DATE_INVALID (tolerance data)?
« Odpověď #6 kdy: 02. 06. 2019, 20:49:12 »
Zkrátka, programy jsou - a zcela správně - nastavovány tak, aby bezpečnost buďto byla zajištěna, nebo je hlášen problém. Mezikroky, kdy by se např. ignoroval čas, jsou naprosto nežádoucí. Otvíralo by to dveře pro bezpečnostní rizika.

Dovedu si představit, že by určitou možnost mohl dávat proxy server, kdyby měl nastavený čas stejně jako stanice. Na něm by se mohlo dát nastavit (případně si ho upravit ve zdrojácích), aby ignoroval rozdíl v času. Ověřil by ostatní parametry. Směrem ke klientskému počítači by komunikaci certifikoval vnitřním důvěryhodným certifikátem.

Ale je to velmi, velmi, velmi debilní nápad. Na 200 % je chyba v tom, proč takovou opičárnu vůbec potřebujete.