Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Následující verze | Předchozí verze | ||
cs:uzivatel:sw:nix:wpa_supplicant [2007/03/19 15:21] 127.0.0.1 upraveno mimo DokuWiki |
cs:uzivatel:sw:nix:wpa_supplicant [2018/10/04 10:55] (aktuální) caletka@cesnet.cz note -> wrap |
||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
- | ====== Konfigurace WPA Supplicantu pro připojení k eduroamu ====== | + | ====== Konfigurace programu WPA Supplicant pro připojení k eduroamu ====== |
- | [[http://hostap.epitest.fi/wpa_supplicant/|WPA Supplicant]] je program, který se v linuxu stará o podporu WPA zabezpečení wi-fi sítí. Na rozdíl od programu [[:cs:uzivatel:sw:nix:xsupplicant|xsupplicant]] bývá standardní součástí distribucí, které podporují WPA šifrování, a tak je zahrnut i ve standardních spouštěcích skriptech wi-fi rozhraní. | + | [[http://w1.fi/wpa_supplicant/|WPA Supplicant]] je program, který se v Linuxu stará o podporu WPA zabezpečení Wi-Fi sítí. Pokud máte grafické rozhraní, pravděpodobně v něm máte i NetworkManager který konfiguruje ''wpa_supplicant'' z grafického prostředí. |
- | ===== Podporované chipsety ===== | + | ===== Konfigurační soubor ===== |
- | Zda má wpa_supplicant zakompilovánu podporu pro váš chipset zjistíte tak, že program spustíte bez parametrů: | + | Jednotlivé bezdrátové sítě se definují v konfiguračním souboru, obvykle ''/etc/wpa_supplicant/wpa_supplicant.conf''. Je jich možno definovat libovolně mnoho, program se připojí k té, která je dostupná a zároveň má největší prioritu. Základní definice sítě ''eduroam'' s nejběžnější konfigurací WPA2/PEAP/MSCHAPv2 vypadá takto: |
<code> | <code> | ||
- | # wpa_supplicant | + | network={ |
- | ... | + | ssid="eduroam" |
- | drivers: | + | key_mgmt=WPA-EAP |
- | hostap = Host AP driver (Intersil Prism2/2.5/3) | + | eap=PEAP |
- | prism54 = Prism54.org driver (Intersil Prism GT/Duette/Indigo) | + | phase2="auth=MSCHAPV2" |
- | atmel = ATMEL AT76C5XXx (USB, PCMCIA) | + | pairwise=CCMP |
- | wext = Linux wireless extensions (generic) | + | group=CCMP TKIP |
- | ndiswrapper = Linux ndiswrapper | + | ca_cert="/etc/ssl/example_CA.pem" |
- | ipw = Intel ipw2100/2200 driver | + | domain_match="radius.example.org" |
- | wired = wpa_supplicant wired Ethernet driver | + | identity="user@example.org" |
- | ... | + | password="CorrectHorseBatteryStaple" |
+ | } | ||
</code> | </code> | ||
- | Pokud v seznamu nenajdete ovladač pro váš wifi adaptér, je možné, že adaptér podporuje generický ovladač //wext//. S tímto ovladačem pracují i nové ovladače pro čipy IPW. | + | ==== Správné ověřování identity RADIUS serveru ==== |
- | ===== Konfigurační soubor ===== | + | <WRAP center round important 60%> |
+ | **Správné nastavení ověřování identity RADIUS serveru**, se kterým váš suplikant komunikuje, je **nezbytné pro ochranu vašeho hesla** i pro ochranu před únosem Wi-Fi provozu. Věnujte mu proto náležitou pozornost! Další informace naleznete na stránce [[cs:uzivatel:sw:certifikaty]]. | ||
+ | </WRAP> | ||
- | Jednotlivé bedrátové sítě, ke kterým se chceme připojit, se definují v konfiguračním souboru ''/etc/wpa_supplicant.conf''. Je jich možno definovat libovolně mnoho, program se připojí k té, která je dostupná a zároveň má největší prioritu. Následující příklad ukazuje připojení k síti //eduroam// 802.1x s následným fallbackem lokální síť organizace (původně //eduroam-simple// řešení založené na authentizaci pomocí web formuláře). | ||
- | **Pozor:** Toto není úplný konfigurační soubor wpa_supplicant.conf, zde je pouze část, věnovaná eduroam sítím. Pro zprovoznění je většinou ještě potřeba poladit alespoň globální parametr //ap_scan//. | + | K ověření identity autentizačního serveru je nutný certifikát certifikační autority, která vydala certifikát RADIUS serveru vaší organizace. Program ''wpa_supplicant'' pracuje pouze s certifikáty formátu PEM. Ve výše uvedeném příkladu konfigurace jde o soubor ''/etc/ssl/example_CA.pem''. Pokud organizace používá certifikáty veřejných autorit, důvěryhodné v operačním systému, je možné nastavit důvěru také volbou ''ca_path'', směřující k adresáři obsahujícím veškeré důvěryhodné certifikáty (včetně symbolických odkazů vygenerovaných utilitou [[https://www.openssl.org/docs/man1.1.0/apps/c_rehash.html|c_rehash]]). Například takto: |
<code> | <code> | ||
- | network={ | + | ca_path="/etc/ssl/certs" |
- | priority=5 | + | |
- | ssid="eduroam" | + | |
- | scan_ssid=1 | + | |
- | key_mgmt=WPA-EAP | + | |
- | eap=PEAP | + | |
- | identity="eduroam_jmeno@realm" | + | |
- | password="eduroam_heslo" | + | |
- | ca_cert="/etc/ssl/certs/cesnet-ca.pem" | + | |
- | altsubject_match="DNS:radius1.organizace.cz;DNS:radius2.organizace.cz" | + | |
- | phase1="peaplabel=0" | + | |
- | phase2="auth=MSCHAPV2" | + | |
- | } | + | |
- | network={ | + | |
- | ssid="organizace" | + | |
- | key_mgmt=NONE | + | |
- | priority=4 | + | |
- | } | + | |
</code> | </code> | ||
- | K úspěšnému připojení k 802.1x síti //eduroam// je nutný certifikát certifikační autority, která vydala certifikát RADIUS serveru vaší organizace. Většinou se jedná o [[http://www.cesnet.cz/pki|CESNET CA]], kořenový certifikát je dostupný na stránce [[http://www.cesnet.cz/pki/cs/ch-CRT-CRL.html|zde]]. Program wpa_supplicant pracuje pouze s certifikáty formátu PEM. Některé organizace používají novou službu [[http://www.cesnet.cz/pki/cs/st-guide-gs.html|SureServer EDU]], jejíž kořenový certifikát od společnosti Global Sign už pravděpodobně máte na systému předinstalovaný, případně si jej můžete stáhnout [[https://secure.globalsign.net/cacert/ct_root.pem|zde]]. | + | Abyste měli jistotu, že se připojujete, //a především že posíláte své heslo// pouze svému domácímu RADIUS serveru, je třeba nastavit také **kontrolu jména/jmen autentizačních serverů**. Bez této konfigurace **bude akceptován jakýkoli certifikát** vydaný důvěryhodnou autoritou, což zejména v případě veřejných autorit znamená miliony certifikátů. |
- | Abyste měli jistotu, že se připojujete, a především že posíláte své heslo vašemu domácímu RADIUS serveru, musíte uvést direktivu ''altsubject_match'' (**Pozor!** V řetězci se nesmí vyskytovat mezery). **Správné nastavení ověřování identity RADIUS serveru**, se kterým váš suplikant komunikuje, je **nezbytné pro ochranu vašeho hesla**. Věnujte tomu proto náležitou pozornost! Další informace nalezne na stránce "[[cs:uzivatel:sw:certifikaty]]". | + | Kontrolu je možné nastavit různými způsoby. Výše uvedený příklad předpokládá certifikát vystavený na jediné jméno ''radius.example.org''. Pokud organizace používá víc autentizačních serverů, kde se každý prokazuje certifikátem vystaveným na jiné jméno, ale sdílí společnou koncovku (například ''r1.radius.example.org'' a ''r2.radius.example.org'') je možné nastavit mírnější kontrolu na společnou koncovku, například: |
- | Provozuje-li vaše organizace víc než jeden RADIUS server, je pro správnou funkci nutné používat wpa_supplikant verze minimálně 0.5.6! Předchozí verze nezvládají ověřit více než jeden RADIUS server. wpa_supplikant musí být přeložen s OpenSSL nikoliv GNU TLS. | + | <code> |
+ | domain_suffix_match="radius.example.org" | ||
+ | </code> | ||
- | ===== Připojení ===== | + | Třetí možností je vyjmenovat přímo kompletní jména autentizačních serverů volbou ''altsubject_match''. Tato volba je vhodná v případě, kdy autentizační servery nesdílí společnou koncovku. Tento způsob nasazení není doporučován pro nové instalace, ale na spoustě institucí přežívá z historických důvodů. Kontrolu pak lze nastavit takto: (**Pozor!** V řetězci se nesmí vyskytovat mezery!) |
- | + | ||
- | Po uložení konfiguračního souboru můžeme zkusit připojení přes rozhraní wlan0 s generickým ovladačem příkazem | + | |
<code> | <code> | ||
- | # wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant.conf | + | altsubject_match="DNS:radius1.example.org;DNS:radius2.example.org" |
</code> | </code> | ||
- | Pokud autentifikace proběhla úspěšně, zbývá rozhraní přiřadit IP adresu pomocí DHCP klienta, např. takto: | + | ==== Ukládání hesla ve formě hashe ==== |
+ | |||
+ | Standardně se heslo ukládá do konfiguračního souboru v otevřené podobě. Při použítí nejběžnějšího protokolu MSCHAPv2 to však není nutné, neboť k ověření hesla se použije pouze jeho NTLM hash. Hash ve formátu vhodném pro vložení do konfiguračního souboru je možné získat například tímto jednořádkovým skriptem: | ||
<code> | <code> | ||
- | # dhcpcd wlan0 | + | $ python -c 'import getpass,hashlib; print("password=hash:"+hashlib.new("md4",getpass.getpass().encode("utf-16le")).hexdigest())' |
+ | Password: CorrectHorseBatteryStaple | ||
+ | password=hash:012c9edfb06b543233745c9aff836490 | ||
</code> | </code> | ||
- | To je ovšem zapotřebí pouze pokud vaše distribuce nepodporuje wpa_supplicant ve svých spouštěcích skriptech. V opačném případě obvykle stačí upravit konfigurační soubor a spustit bezdrátovou síť spouštěcím skriptem distribuce. Průběh asociace je možné sledovat na příkazovém řádku programem wpa_cli, nebo v grafickém režimu pomocí programu //wpa_gui//. | + | <WRAP center round tip 60%> |
+ | Uložení hashe **nepředstavuje žádnou ochranu před zneužitím hesla**. Útočník, který se zmocní hashe jej může přímo použít k přihlášení (technika [[https://en.wikipedia.org/wiki/Pass_the_hash|pass the hash]]). Jde tak spíše o ochranu před odcizením hesla letmým pohledem. | ||
+ | </WRAP> | ||
- | ===== Debian a jeho klony (*ubuntu) ===== | + | |
- | V testing verzi debianu je wpasupplicant balíček ve verzi 0.5.x, který je navázaný na ifupdown skripty (wpasupplicant neběží jako samostatný daemon). Parametry nastavení se očekávají v souboru /etc/network/interfaces, kam stačí přidat: | + | ===== Konfigurace sítě se sdíleným klíčem ===== |
+ | |||
+ | Do konfiguračního souboru také můžeme snadno uložit konfiguraci bezdrátových sítí zabezpečených jednoduchým sdíleným tajemstvím WPA. K vygenerování potřebného fragmentu konfigurace je možné využít utilitu ''wpa_passphrase'': | ||
<code> | <code> | ||
- | auto eth1 | + | $ wpa_passphrase HomeNetwork |
- | iface eth1 inet dhcp | + | # reading passphrase from stdin |
- | wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf | + | CorrectHorseBatteryStaple |
+ | network={ | ||
+ | ssid="HomeNetwork" | ||
+ | #psk="CorrectHorseBatteryStaple" | ||
+ | psk=a14c6fb42d868ab1d1fb62373e6cc8d3bf0b3fa79e187d7226f1b22eaa784660 | ||
+ | } | ||
</code> | </code> | ||
- | kde eth1 je sítové rozhraní bezdrátového adaptéru a soubor /etc/wpa_supplicant/wpa_supplicant.conf je funkční konfigurace pro wpasupplicant. | + | Poskytnuté heslo je rovnou převedeno do 256bitového sdíleného tajemství WPA, takže původní heslo může být z konfigurace odstraněno. |
- | Pokud v okamžiku, kdy tento návod čtete, stále není v distribuci k dispozici alespoň verze 0.5.6, můžete si stáhnou balíček pro Debian z [[http://uit.opf.slu.cz/howto/cesnet-voip-repository-on-opf|apt repository na opf.slu.cz]]. | + | <WRAP center round important 60%> |
+ | Do konfigurace WPA suplikanta **nepřidávejte sítě, které nepoužívají žádné šifrování!** Vystavili byste se tak riziku přesměrování na falešný přístupový bod a kompromitace Wi-Fi provozu. V případě, že nešifrovanou síť musíte pravidelně používat, definujte ji s volbou ''disabled=1'' a povolujte za běhu pouze podle potřeby. | ||
+ | </WRAP> | ||
- | ===== Jádra Linuxu ===== | ||
- | ==== Distribuční jádra ==== | ||
- | Mnoho distributorů Linuxu se stará, aby jejich jádra podporovala co nejvíc zařízení. Hledají a sami aplikují potřebné záplaty pro dosažení nejlepší funcionality. Provozujete-li distribuční kernel, tak prostě vyzkoušejte výše popsané nastavení, je veliká šance, že vám připojení bude fungovat bez potíží. | + | ===== Připojení ===== |
- | ==== Vanila jádra <= 2.6.18 ==== | + | Vlastní spuštění WPA suplikanta je nejlepší přenechat spouštěcím skriptům daného operačního systému a tedy postupovat podle návodu konkrétní distribuce. Pro ruční vyzkoušení funkčnosti můžeme zkusit spustit suplikanta i ručně: |
+ | <code> | ||
+ | # wpa_supplicant -iwlan0 -c/etc/wpa_supplicant/wpa_supplicant.conf -d | ||
+ | </code> | ||
+ | |||
+ | Pokud autentizace proběhla úspěšně (poslední stav suplikanta je ''COMPLETED''), stačí na daném rozhraní spustit DHCP klienta, např. takto: | ||
+ | |||
+ | <code> | ||
+ | # dhcpcd wlan0 | ||
+ | </code> | ||
- | <del>Popsaný postup byl úspěšně testován na jádru 2.6.16-r1 s MiniPCI kartou Intel Pro Wireless 2200BG, která je součástí balíku Centrino. Ovladač pro tuto kartu je zahrnut přímo v oficiálních zdrojových kódech jádra. I přesto, že IPW2200 má podporu ve wpa_supplicantu, nové verze jaderného modulu pracují pouze přes wireless extensions. --- //[[http://logout.sh.cvut.cz/~oskar/blog/|Ondřej Caletka]]//</del> | + | ===== Ovládání za běhu ===== |
- | Mé zkušenosti s jádrem 2.6.16.9 ukazují, že drivery z vanila kernelu nefungují korektně s 802.1x a WPA, klient se pořád asocijuje, dostává disconnect event a nedokáže dostat žádná data k RADIUS serveru, tedy se nedokáže ověřit. Musel jsem nahradit celý [[http://ieee80211.sourceforge.net/|802.1x subsystém]] vanila kernelu a následně nahradit drivery pro kartu [[http://ipw2200.sourceforge.net/|Intel Pro Wireless 2200BG]]. | + | Součástí distribuce ''wpa_supplicant'' jsou i programy ''wpa_cli'' a ''wpa_gui'', poskytující řádkové, resp. grafické rozhraní k dálkovému ovládání běžícího suplikanta. Při správném nastavení oprávnění komunikačního soketu (vizte [[https://w1.fi/cgit/hostap/plain/wpa_supplicant/wpa_supplicant.conf|dokumentaci]]) je možné tyto utility používat i jako neprivilegovaný uživatel a snadno tak za chodu přepínat mezi Wi-Fi sítěmi. Je také možné za chodu přidávat nové sítě. Taková konfigurace se však po ukončení suplikanta ztratí, není-li nastavena volba ''update_config=1''. Neukládání konfigurace však může být výhodné pro dočasné připojení k nezabezpečeným sítím. |
- | Pokud používáte kernel z distribuce je možné, že toto za vás už udělal někdo z vývojářů. Pokuste se to zjistit v dokumentaci. Testoval jsem také kernel 2.6.17 - byl třeba stejný postup, ale nechodí CDMA modem Eurotelu. V kernelu 2.6.18 zase špatně funguje [[http://www.suspend2.net/|Suspend 2]], takže k 7. 11. 2006 se jeví jako jediný použitelný kernel 2.6.16.9, ve kterém fungují všechny pro mě důležité komponenty. --- //[[http://staff.cesnet.cz/~semik|Jan Tomášek]]// | + | Utilita ''wpa_cli'' standardně vypisuje na obrazovku každý krok během připojování a dokáže tak posloužit při hledání problémů. Základními příkazy jsou: |
- | ==== Vanila jádro = 2.6.20.1 ==== | + | * ''status'' – vypíše aktuální stav suplikanta |
+ | * ''scan'' – spustí skenování dostupných sítí v okolí (skenování je asynchronní) | ||
+ | * ''scan_results'' – vypíše výsledky posledního skenování | ||
+ | * ''list_networks'' – vypíše seznam konfigurovaných sítí | ||
+ | * ''select_network <id sítě|any>'' – vynutí připojení ke konkrétní síti | ||
+ | * ''roam <bssid>'' – vynutí přechod na konkrétní přístupový bod s daným BSSID (MAC adresou) | ||
- | U vanila jádra není nutné patchovat kernel ovladači z [[http://ipw2200.sourceforge.net/|sourceforge.net]]. Stačí ho správně nakonfigurovat: | ||
- | * všechny položky v cryptoapi (v menuconfigu //Cryptographic options//) mít jako muduly. | + | ====== |
- | * **__Zapnout volbu__** //Wireless Extension API over RtNetlink// (v //Device drivers/Network device support/Wireless LAN (non-harmradio)//). Bez toho se nepovede autentikace proti radius serveru! | + | --- //[[caletka@cesnet.cz|Ondřej Caletka]] 2017/03/17 22:32// přepracování a rozšíření návodu \\ |
- | * Jako moduly mít příslušné drivery (//IEEE 802.11 for Host AP (Prism2/2.5/3 and WEP/TKIP/CCMP// pro Intersil Prism2, //Intel PRO/Wireless 2200BG and 2915ABG Network Connection// pro intelí kartu) --- //[[http://cs.felk.cvut.cz/webis/people/vranyj1.html|Jan Vraný]] // | + | |
- | ====== ====== | ||
- | --- Návod byl převzat od [[http://logout.sh.cvut.cz/~oskar/blog/|Ondřeje Caletky]], původní text je v jeho [[http://logout.sh.cvut.cz/~oskar/blog/static.php?page=eduroam|blogu]]\\ | ||
- | --- //[[http://staff.cesnet.cz/~semik|Jan Tomášek]] 07.06.2006 09:53// vytvoření dokumentu\\ | ||
- | --- //[[http://staff.cesnet.cz/~semik|Jan Tomášek]] 18.03.2007 18:18// doplnění informací o certifikátech, doplnění sekce o kernelech |