örömmel jelentjük be, hogy a Spring Security Kerberos kiterjesztés első mérföldköve letölthető. A kiadás a Maven milestone repository címen is elérhető http://maven.springframework.org/milestone. A Spring Security Kerberos kiterjesztéssel a felhasználók csak az URL megnyitásával hitelesülnek a webes alkalmazás ellen. Nincs szükség felhasználónév/jelszó megadására és további szoftverek telepítésére.
mielőtt mélyebben belemennék a Kerberosba, szeretném bemutatni a Spring Security Extensions-t, egy új Spring Extension projektet, amelynek célja a core Spring Security projekt kiterjesztési moduljainak biztosítása. Jelenleg két bővítményt fejlesztettünk ki: egy SAML2 integrációt és egy Kerberos/SPNEGO integrációt. Minden modulnak saját kiadási ciklusa lesz, így az emberek élvezhetik ezeket a bővítményeket, amint készen állnak, és nem kell várniuk a következő tavaszi biztonsági kiadásra. Ha bármilyen ötlete vagy akár valamilyen kódja van a további kiterjesztésekhez, kérjük, mondja el nekünk!
Kerberos/SPNEGO
ennek a modulnak az első mérföldkövében a Kerberos/SPNEGO megoldást kínáljuk webes alkalmazásokhoz. A Kerberos egy szabványosított hálózati hitelesítési protokoll, amelyet arra terveztek, hogy erős hitelesítést biztosítson az ügyfél/szerver alkalmazásokhoz, például a webes alkalmazásokhoz, ahol a böngésző az ügyfél. Ez az ajánlott módszer a felhasználók hitelesítésére egy Windows hálózatban, és helyettesíti az elavult és viszonylag bizonytalan NTLM-et. Emellett széles körben használják a *NIX környezetekben, és minden nagyobb platformra vannak implementációk. Tehát nagyon valószínű, hogy már van Kerberos a helyén, és most már használhatja ezt a saját webes alkalmazásában is. Ez azt jelenti, hogy a felhasználó csak beírja az URL-t, és automatikusan hitelesíti a domain felhasználónevét, például [email protected]. ezután megtudhatja ezt a felhasználónevet a Spring Security segítségével vagy akár kérésre.getRemoteUser(). Hogy működik ez? Itt van egy rövid áttekintés:
a böngésző egy GET kérést küld a webalkalmazásnak (1), amely ezt követően visszaadja, hogy “tárgyalni” hitelesítés szükséges (2). A böngésző ezután megkéri a Kerberos szervert, hogy szerezzen be egy úgynevezett szervizjegyet (3). A böngésző ezután elküldi ezt a szolgáltatási jegyet, amely igazolja a hívó személyét ,valamint néhány további dolgot a webalkalmazáshoz (5). A jegy érvényesítése után, a webalkalmazás és a Kerberos szerver közötti megosztott titok alapján, visszakapja a felhasználónevet.
ahhoz, hogy ez működjön, minden webes alkalmazásnak regisztrálnia kell a Kerberos szerveren, és kap egy szolgáltatási prinicipal-t és egy megosztott titkot. Webes alkalmazások esetén a szolgáltatás főkötelezettjének “HTTP/<teljes minősített tartománynév>@DOMAIN” – nek kell lennie. Például “HTTP/[email protected]”, ha az alkalmazás fut web.springsource.com. ezután exportálnia kell a megbízó hitelesítő adatait egy keytab fájlba (megosztott titok), és ezt elérhetővé kell tennie az alkalmazás számára. Minden Kerberos alapú rendszer így fog működni, de ennek a szolgáltatás-principalnak a létrehozása és a keytab rendszerenként eltérő. Megmutatom, hogyan csinálod ezt a Microsoft Windows és az MIT Kerberos használatával, de más implementációkkal is működnie kell.
service principal létrehozása Microsoft Windows 2008 Server
bár ez a Microsoft Windows 2008 Server-re vonatkozik, nagyon hasonlónak kell lennie 2003-ban, sőt 2000-ben is. Az ActiveDirectory – ban csak létrehoz egy normál tartományfelhasználót, majd hozzárendel neki egy szolgáltatási főkötelezettet (SPN), és létrehozza a keytab-ot egy parancssori segédprogrammal. És most lépésről lépésre:
hozzon létre egy normál felhasználót, amely a szolgáltatás fővé válik. A felhasználónév és a jelszó értelmetlen a Kerberos számára, de természetesen válasszon egy hasznos nevet, például http-web.springsource.com. csak győződjön meg róla, hogy kikapcsolja a “felhasználónak meg kell változtatnia a jelszót a következő bejelentkezéskor” opciót, és aktiválja a “jelszó soha nem jár le”lehetőséget.
ezt követően a “ktpass” parancssori eszközt kell használnia.exe”. Már szerepel a Windows 2008 Server rendszerben, a korábbi verziókban magának kell telepítenie. Csak győződjön meg arról, hogy olyan verziót használ, amely megfelel a szerver verziójának, valamint a területi beállításnak is meg kell egyeznie. Ez az eszköz hozzárendeli a szolgáltatás főnevét (SPN) a korábban létrehozott felhasználóhoz, és exportálja a felhasználói kulcsot egy keytab fájlba. Ha a szolgáltatás fő “HTTP/[email protected]” és a felhasználó http-web.springsource.com, akkor a ktpass parancsnak így kell kinéznie:
ktpass /out http-web.keytab /mapuser /princ HTTP/ /pass *
a ktpass kérni fog néhány jelszót. Meg kell választani néhány biztonságos random egyet érte. Ha most van egy fájl http-web.keytab a könyvtárban, akkor minden jól működött. Erre a fájlra később van szükség az alkalmazásban, mivel tartalmazza a megosztott titkot a szolgáltatási jegyek érvényesítéséhez.
service principal létrehozása MIT Kerberos
*NIX rendszereken és Mac OS X rendszerben is széles körben használják a MIT Kerberos implementációt. A MIT Kerberos segítségével még egyszerűbb. Csak nyissa meg a kadmin konzolt, és hajtsa végre a következő parancsokat:
kadmin: addprinc -randkey HTTP/web.springsource.comkadmin: ktadd -k /http-web.keytab HTTP/web.springsource.com
ezután rendelkeznie kell egy http-web fájllal.keytab alatt gyökér. Ez a fájl később szükséges az alkalmazásban, mivel tartalmazza a megosztott titkot a szolgáltatási jegyek érvényesítéséhez.
konfigurálása tavaszi biztonsági
először is, a követelmények:
- tavaszi biztonság 3.0.0 M2
- SUN JRE/JDK 1.6.x
- Kerberos környezet
- böngésző, amely támogatja az SPNEGO-t (Firefox, IE, Safari)
ahhoz, hogy a Kerberos modult a Spring Security programban használhassuk, csak egy szűrőt, egy hitelesítési belépési pontot és egy hitelesítési szolgáltatót kell deklarálnunk. Mi is egy minta web app, amely segítségével, mint a kiindulási pont. Csak be kell állítania a szolgáltatás fő nevét, és el kell helyeznie a generate keytab-ot. A minta alkalmazás szerepel a fent említett letöltésben.
ha megnyitja a biztonságot.a /src/main/webapp/WEB-INF alatt található mintaalkalmazás xml fájljában egy Alapvető Tavaszi biztonsági konfiguráció látható, amely az új Kerberos modult használja.
az első két bab (SpnegoEntryPoint és SpnegoAuthenticationProcessingFilter) felelős a kézfogásért, majd a KerberosServiceAuthenticationProvider végül érvényesíti a szolgáltatási jegyet. Jelenleg csak a Kerberos/SPNEGO implementációt támogatjuk, amely a SUN JRE/JDK része. Mivel csak a Kerberos-tól kapod vissza a felhasználónevet, szükséged van egy UserDetailsService-re is, hogy lehívd a szerepeket és talán néhány más felhasználói attribútumot. Ebben a mintában csak egy dummy implementációt használunk a tesztelés megkönnyítésére.
mint látható, már kitöltöttük a szolgáltatás prinicipal nevét és a keytab helyét. Módosítsa ezeket az értékeket az igényeinek megfelelően, és győződjön meg arról, hogy a korábban létrehozott keytab elérhető ezen a helyen.
most indítsa el a szervert, és próbálja meg az SPNEGO hitelesítést. Látnia kell a teljes domain felhasználónevét a böngészőben. A kódban lekérheti a felhasználónevet a normál Spring biztonsági osztályokkal, vagy akár a szokásos Java servlet híváskéréssel.getRemoteUser(). Ha nem működik (talán üres oldalt lát), ellenőrizze ezeket a dolgokat:
- ellenőrizze a
- naplófájlt győződjön meg arról, hogy a teljes minősített tartománynevet (nem az IP-címet és nem a rövid nevet) használja az URL-ben.
- Internet Explorer használata esetén: kapcsolja be a “Windows Integrated Authentication” funkciót, és győződjön meg arról, hogy a tartomány (a mi esetünkben web.springsource.com) szerepel az IE helyi intranetes webhely szakaszában.
- ha Firefoxot használ: nézze meg itt.
- Ha Windows klienst használ: Az ügyfélnek és a kiszolgálónak különböző gépeken kell lennie, mert különben a Windows Kerberos helyett NTLM-et fog használni.
- ellenőrizze, hogy az idő szinkronizálva van-e az összes érintett gépen.
- Ha Microsoft AD-t használ, további segítséget itt talál: http://msdn.microsoft.com/en-us/library/ms995329.aspx
ezenkívül a megfelelő Kerberos Környezet beállítása bonyolult lehet, és fontos, hogy ezt a Spring Security Kerberos kiterjesztés használata előtt végezze el. A tanácsadás során felmerülő problémák többsége a Kerberos környezettel kapcsolatos problémák, nem pedig magával az alkalmazással.
ha nem szeretné használni a Spring Security Kerberos kiterjesztést a saját Maven projektjében, hozzá kell adnia a Spring Milestone Repository-t a pom-hoz.xml. Ennek így kell kinéznie:
és persze a függőség:
van még némi tennivaló, például a Kerberos Java kliensek számára történő biztosítása, és nem csak a szerver számára, de reméljük, hogy kipróbálja ezt a mérföldkő kiadást és visszajelzést ad. A Közösségi Fórum a legjobb hely a kérdések feltevésére vagy az új funkciókkal kapcsolatos megbeszélések megkezdésére. Alternatív megoldásként, ha valami hibát talál, felvethet egy Jira kérdést.