Uživatelské nástroje

Nástroje pro tento web


Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

cs:howto:squid_https [2016/09/20 13:02] (aktuální)
Řádek 1: Řádek 1:
 +====== Squid a cachování https provozu ======
 +
 +V [[squid|základním návodu]] jsme si ukázali, jak zprovoznit squid. V takovém nastavení cachuje provoz protokolu http. Avšak šifrovaný provoz přes protokol https prochází zcela nezměněn skrz, tedy při přístupu k zabezpečeným stránkám nepocítíme žádné zrychlení ani zmenšení provozu.
 +
 +Abychom pochopili, proč tomu tak je, podíváme se jak funguje protokol https. Na začátku se naváže spojení a poté si klient se serverem vyjedná šifrování. V rámci tohoto vyjednávání se server představí certifikátem. Tento certifikát obsahuje informaci, pro kterou doménu je vystaven a je podepsán některou certifikační autoritou. Klient zkontroluje,​ že doména v certifikátu odpovídá té, kterou požadoval a že dané autoritě věří (seznam důvěryhodných autorit má klient uložený). Tím je zaručeno, že se jen tak někdo nemůže vydávat za server, kterým není. A pomocí šifrování je zaručeno, že se někdo uprostřed nemůže jen připojit k opravdovému serveru a certifikát přeposlat.
 +
 +Což je ovšem přesně to, co by taková proxy potřebovala udělat. Připojit se na původní server a představit se jeho certifikátem. To však nejde, proto squid v základním nastavení pouští šifrovaný provoz skrz. Ale ono by stačilo představit se certifikátem od některé důvěryhodné autority.
 +
 +A přesně to lze udělat. Vytvoříme si svoji certifikační autoritu a tu nastavíme v prohlížečích jako důvěryhodnou. Tuto autoritu dáme k dispozici naší proxy. Kdykoliv se klient pokusí vyjednat šifrované spojení skrz proxy na některý server, proxy toto spojení odchytí. Připojí se na požadovaný server, prohlédne si certifikát a pomocí naší autority vystaví podobný. Tím se poté představí klientovi a ten mu bude důvěřovat.
 +
 +Je třeba však poznamenat, že šifrování je výpočetně náročná operace a v případě rychlých přípojek bude mít toto nastavení přesně opačný efekt, než zamýšlený ‒ stahování dat je rychlé, ale jejich rozšifrování a opětovné zašifrování v routeru jej brzdí.
 +
 +===== Morální, právní a bezpečnostní hledisko =====
 +
 +Je třeba si uvědomit, že zde provádíme něco, čemu se celý systém šifrování snaží bránit. Toto je totiž učebnicová ukázka takzvaného MITM útoku (Man-In-The-Middle,​ útoku člověka ve středu). Tato funkcionalita je ve squid proto, aby umožnila cachovat i šifrované stránky, avšak s vědomím a souhlasem uživatelů. Provádět toto bez vědomí uživatele je určitě nemorální (protože má dojem, že jeho komunikaci vidí jen koncový server) a pravděpodobně i nelegální. O otázkách zkoumání či upravování obsahu pomocí proxy snad nemusí být ani řeč.
 +
 +Další úhel pohledu je bezpečnostní. Jednak je v systému navíc další zařízení,​ přes které se dá do komunikace dostat, kdyby bylo napadené. V případě, že máte nastavené ukládání dat na disk, ukládají se i zabezpečené stránky ‒ tedy například obsah vašeho internetového bankovnictví. Dále, rozhodování o důvěryhodnosti certifikátu a šifrování provádí proxy, nikoliv klient (tedy, má vlastní sadu důvěryhodných autorit, vlastní pravidla o dostatečně silných šifrách).
 +
 +A poslední, některé bezpečnostní prvky, jako například [[https://​www.dnssec-validator.cz/​|DNSSEC validator]],​ budou hlásit, že došlo k podvržení certifikátu (což je pravda).
 +
 +===== Výroba autority =====
 +
 +Nyní vyrobíme vlastní autoritu.
 +
 +  cd /etc/squid
 +  mkdir ssl_cert
 +  openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout authority.pem -out authority.pem
 +
 +Toto vytvoří nový klíč a k němu odpovídající certifikát v souboru ''/​etc/​squid/​ssl_cert/​authority.pem''​. Na jménu souboru nezáleží,​ ale pokud jej změníte, je třeba odpovídajícím způsobem upravit i konfiguraci. Tento příkaz se bude vyptávat na informace, které má do certifikátu zapsat. Je celkem jedno, co tam bude uvedeno, protože certifikát budete používat pouze vy.
 +
 +Tento certifikát bude platný po dobu jednoho roku. Lze buď změnit dobu platnosti (365 dní), nebo po roce vytvořit nový a vyměnit.
 +
 +Zatímco squid požaduje autoritu ve formátu PEM, prohlížeče,​ do kterých budeme certifikát přidávat, obvykle chtějí DER. Tímto příkazem převedeme certifikát do požadovaného formátu.
 +
 +  openssl x509 -in authority.pem -outform DER -out authority.der
 +
 +Stáhněte si certifikát do počítače (spuštěno na počítači):​
 +
 +  scp root@192.168.1.1:/​etc/​squid/​ssl_cert/​authority.der .
 +
 +Nyní jej vložte do prohlížeče. Toto se liší podle prohlížeče,​ například ve Firefoxu to lze provést následujícím způsobem: V nastavení navštívíte záložku ''​Rozšířené'',​ v ní ''​Certifikáty''​. Tlačítkem ''​Certifikáty''​ se otevře nový dialog a v něm se na záložce ''​Autority''​ vyskytuje seznam aktuálně důvěryhodných autorit. Pomocí tlačítka ''​Import''​ lze přidat novou autoritu.
 +
 +<WRAP center important 80%>
 +Pokud někdo nepovolaný získá soubor s klíčem (''​authority.pem''​),​ je schopný obdobným způsobem podvrhovat certifikáty. Pravděpodobně to však nebude dělat jen za účelem cachování provozu. Je tedy třeba soubor dobře chránit před únikem. Pokud k úniku přesto dojde, je nutné autoritu ze všech prohlížečů neprodleně odstranit.
 +</​WRAP>​
 +
 +===== Nastavení squid =====
 +
 +To, jestli squid nahlíží do šifrovaných spojení je vlastnost portu, na kterém poslouchá. To umožňuje mít více portů, z nichž některé do spojení nahlíží a jiné ne. Na daném portu je třeba povolit jednak ''​ssl-bump''​ (nahlížení do šifrovaných spojení) a jednak dynamické generování certifikátů. Taktéž nastavíme velikost cache pro nagenerované certifikáty a kterou autoritu použít. Při použití stejného portu (jako v tomto případě) je třeba původní řádek s daným portem nahradit.
 +
 +  http_port 3128 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/​etc/​squid/​ssl_cert/​authority.pem
 +
 +Dále je třeba povolit funkcionalitu pro všechna spojení:
 +
 +  always_direct allow all
 +  ssl_bump server-first all
 +
 +V tomto místě by šlo nastavit, aby se do komunikace s některými servery nenahlíželo,​ nebo aby některý z počítačů byl z nahlížení vyňat. Například nahrazením předchozího tímto:
 +
 +  # Domény, které se nebudou dešifrovat
 +  acl nobump_domains example.bank.com
 +  acl nobump_domains another.excluded.domain.cz
 +  ​
 +  # Klienti, kterým se nebude nahlížet
 +  acl nobump_clients src 192.168.1.13
 +  ​
 +  always_direct allow all
 +  ssl_bump nobump_domains none
 +  ssl_bump nobump_clients none
 +  ssl_bump server-first all
 +
 +===== Důvěryhodnost certifikátů =====
 +
 +Jak již bylo zmíněno výše, důvěryhodnost certifikátu serveru posuzuje squid. Ve výchozím nastavení, pokud usoudí, že certifikát není důvěryhodný,​ jednoduše vrátí klientovi stránku s chybou. Toto chování mu lze vymluvit, například globálně:
 +
 +  sslproxy_cert_error allow all
 +
 +Poté squid místo chybové stránky vyrobí certifikát,​ který simuluje stejný problém (tedy, pro self-signed vyrobí self-signed certifikát,​ pro neznámou certifikační autoritu vyrobí nějakou neznámou certifikační autoritu a k ní certifikát,​ a tak podobně). Ten poté pošle klientovi, a uživatel vidí obdobnou chybovou hlášku. Může se tedy rozhodnout stejně, jako by to mohl udělat bez proxy.
 +
 +Druhý problém je, že Turris v základní instalaci obsahuje jen velmi malé množství důvěryhodných certifikátů. Tedy, většina stránek se bude tvářit nedůvěryhodně. Větší sadu lze doinstalovat ve Forisu, v záložce ''​Updater''​ (seznam balíčků ''​Certifikáty kořenových autorit''​). Tento seznam je převzatý z Debianu. Pozor, některé programy na Turrisu (například ''​wget''​) začnou věřit certifikátům vydaným libovolnou z těchto autorit. V případě, že vám toto nevyhovuje, správa certifikátů je na vás, balíček neinstalujte.