Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treci
O autorach ..................................................................................... 11
Wprowadzenie ................................................................................ 13
Rozdzia 1. Instalacja i kompilacja serwera JBoss ............................................. 23
Pobranie plikw binarnych ............................................................................................. 24
Warunki instalacji .................................................................................................... 24
Instalacja serwera przy uyciu pakietu zawierajcego wersj binarn ........................... 24
Struktura katalogw serwera JBoss .......................................................................... 25
Domylny zestaw konfiguracyjny serwera ............................................................... 25
conf\jboss-minimal.xml ........................................................................................... 27
conf\jboss-service.xml ............................................................................................. 27
conf\jboss.web ......................................................................................................... 27
conf\jndi.properties .................................................................................................. 27
conf\log4j.xml .......................................................................................................... 28
conf\login-config.xml ............................................................................................... 28
conf\server.policy ..................................................................................................... 28
conf\standardjaws.xml ............................................................................................. 28
conf\standardjboss.xml ............................................................................................. 28
conf\standardjbosscmp-jdbc.xml .............................................................................. 28
conf\xmdesc\*-mbean.xml ....................................................................................... 28
deploy\bsh-deployer.xml .......................................................................................... 28
deploy\cache-invalidation-service.xml ..................................................................... 29
deploy\client-deployer-service.xml .......................................................................... 29
deploy\ear-deployer.xml .......................................................................................... 29
deploy\ejb-deployer.xml .......................................................................................... 29
deploy\hsqldb-ds.xml ............................................................................................... 29
deploy\http-invoker.sar ............................................................................................ 29
deploy\jboss-aop.deployer ....................................................................................... 29
deploy\jboss-hibernate.deployer ............................................................................... 30
deploy\jboss-local-jdbc.rar ....................................................................................... 30
deploy\jboss-ws4ee.sar ............................................................................................. 30
deploy\jboss-xa-jdbc.rar ........................................................................................... 30
deploy\jbossjca-service.sar ....................................................................................... 30
deploy\jbossweb-tomcat50.sar ................................................................................. 30
deploy\jms\hsqldb-jdbc2-service.xml ...................................................................... 30
deploy\jms\jbossmq-destinations-service.xml .......................................................... 31
deploy\jms\jbossmq-httpil.sar .................................................................................. 31
Spis treci
5
JRMPProxyFactory tworzenie dynamicznych porednikw JRMP .................. 149
HttpInvoker RMI/HTTP Transport ................................................................... 149
HA JRMPInvoker klastrowy transport RMI/JRMP ........................................... 150
HA HttpInvoker klastrowy transport RMI/HTTP ............................................. 150
HttpProxyFactory tworzenie dynamicznych porednikw HTTP ..................... 151
Czynnoci pozwalajce udostpni dowolny interfejs RMI
przez protok HTTP ........................................................................................... 152
Spis treci
7
Model bezpieczestwa serwera JBoss .......................................................................... 339
Obsuga bezpieczestwa deklaratywnego w serwerze JBoss, odsona druga ......... 341
Architektura JBossSX .................................................................................................. 346
W jaki sposb JaasSecurityManager korzysta z JAAS .......................................... 348
Komponent JaasSecurityManagerService .............................................................. 351
Komponent JaasSecurityDomain ........................................................................... 353
Komponent adujcy plik XML z konfiguracj logowania .................................... 355
Komponent zarzdzajcy konfiguracj logowania ................................................. 357
Uywanie i tworzenie moduw logowania JBossSX ............................................ 358
Usuga DynamicLoginConfig ................................................................................ 382
Protok Secure Remote Password (SRP) .................................................................... 383
Udostpnianie informacji o hasach ....................................................................... 388
Szczegy dziaania algorytmu SRP ....................................................................... 390
Uruchamianie serwera JBoss z uyciem menedera bezpieczestwa Java 2 ................ 396
Zastosowanie protokou SSL przy uyciu JSSE ........................................................... 399
Konfiguracja serwera JBoss dziaajcego za firewallem .............................................. 403
Zabezpieczanie serwera JBoss ...................................................................................... 404
Usuga jmx-console.war ......................................................................................... 405
Usuga web-console.war ........................................................................................ 405
Usuga http-invoker.sar .......................................................................................... 405
Usuga jmx-invoker-adaptor-server.sar .................................................................. 405
Spis treci
Rozdzia 8.
Bezpieczestwo
Zapewnienie odpowiedniego poziomu bezpieczestwa jest jednym z fundamentalnych
zada aplikacji korporacyjnych. Musimy by w stanie precyzyjnie okreli, kto moe
mie dostp do aplikacji i w jakim zakresie moe z oferowanych przez system operacji korzysta. Specyfikacja J2EE definiuje prosty, korzystajcy z pojcia roli model
bezpieczestwa dla komponentw sieciowych i EJB. Bezpieczestwem serwera JBoss
zajmuje si podsystem o nazwie JBossSX. Obsuguje on zarwno bazujcy na rolach
deklaratywny model bezpieczestwa, jak i pozwala na integracj za pomoc porednika ze specjalizowanym moduem bezpieczestwa. Domylna implementacja deklaratywnego modelu bezpieczestwa korzysta z technologii JAAS (ang. Java Authentication
and Authorization Service). Warstwa porednika bezpieczestwa pozwala na podczenie dowolnego, specjalizowanego moduu obsugi kwestii bezpieczestwa, ktrego nie
jestemy w stanie zdefiniowa za pomoc modelu deklaratywnego. Odbywa si to
w sposb przezroczysty z punktu widzenia komponentw biznesowych. Zanim przejdziemy do szczegw implementacyjnych serwera JBoss, przypomnimy opisane w specyfikacji modele bezpieczestwa dotyczce serwletw i komponentw EJB oraz podstawy technologii JAAS.
324
Na listingu 8.1 prezentujemy sposb uycia elementu security-role-ref w pliku deskryptora ejb-jar.xml.
Listing 8.1. Fragment deskryptora ejb-jar.xml ilustrujcy sposb uycia elementu security-role-ref
<!-- Przykadowy fragment deskryptora ejb-jar.xml -->
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name>ASessionBean</ejb-name>
...
<security-role-ref>
<role-name>TheRoleICheck</role-name>
<role-link>TheApplicationRole</role-link>
</security-role-ref>
</session>
</enterprise-beans>
...
</ejb-jar>
Rozdzia 8. Bezpieczestwo
325
Tosamo komponentu wywoujcego metod moe by taka sama jak aktualna tosamo klienta, ktry z tego komponentu korzysta. Moemy jednak posuy si inn
rol. Osoba konstruujca aplikacj uywa elementu security-identity wraz z elementem podrzdnym use-caller-identity, chcc wskaza, e aktualna tosamo komponentu EJB ma by propagowana w ramach wywoa metod innych komponentw.
Opcja ta jest domylna i zostanie zastosowana take w sytuacjach, w ktrych element
security-identity nie bdzie w ogle zdefiniowany.
Rozwizanie alternatywne polega na uyciu elementu run-as/role-name. Okrelamy
w ten sposb inn rol, wskazan wanie przez warto elementu role-name, ktra
bdzie odpowiadaa tosamoci wysyanej podczas wywoywania metod innych komponentw EJB. Zauwa, e nie zmieniamy w ten sposb tosamoci obiektu wywoujcego, co pokazuje metoda EJBContext.getCallerPrincipal. Oznacza to natomiast,
e rolom obiektu wywoujcego przypisywana jest pojedyncza rola okrelona przez
326
warto elementu run-as/role-name. Jednym z zastosowa elementu run-as jest uniemoliwienie zewntrznym klientom dostpu do komponentw EJB, z ktrych chcemy
korzysta wycznie wewntrz aplikacji. Osigamy to na zasadzie przypisania elementom method-permission komponentu EJB takich rl, majcych zezwolenie na wywoanie metody, ktre nigdy nie zostan przydzielone klientom zewntrznym. Nastpnie
komponentom EJB, ktre upowanimy do wywoywania metod komponentw wewntrznych, przypisujemy t rol za pomoc elementu run-as/role-name. Listing 8.3
zawiera fragment deskryptora ejb-jar.xml, w ktrym uyty zosta element security-identity.
Listing 8.3. Fragment deskryptora ejb-jar.xml, ktry jest przykadem wykorzystania elementu
security-identity
<!-- Przykadowy fragment deskryptora ejb-jar.xml -->
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name>ASessionBean</ejb-name>
<!-- ... -->
<security-identity>
<use-caller-identity/>
</security-identity>
</session>
<session>
<ejb-name>RunAsBean</ejb-name>
<!-- ... -->
<security-identity>
<run-as>
<description>A private internal role</description>
<role-name>InternalRole</role-name>
</run-as>
</security-identity>
</session>
</enterprise-beans>
<!-- ... -->
</ejb-jar>
Rozdzia 8. Bezpieczestwo
327
Rysunek 8.3.
Struktura elementu
security-role
aplikacyjny. Role z deskryptora wdroenia to skadniki aplikacji, taki jest te ich zasig. W przypadku aplikacji bankowej rolami takimi moe by np. KierownikZmiany,
Kasjer czy Klient.
W serwerze JBoss elementy security-role uywane s jedynie w celu przyporzdkowania wartoci security-role/role-name do roli logicznej, do ktrej odwouje si
komponent. Role przypisywane uytkownikowi s dynamiczn funkcj menedera bezpieczestwa aplikacji, co pokaemy podczas omawiania szczegw implementacyjnych
podsystemu JBossSX. JBoss nie wymaga definicji elementw security-role w celu
okrelenia uprawnie zezwalajcych na wywoywanie metod. Jednake tworzenie elementw security-role jest cigle zalecan praktyk, gwarantujc przenono aplikacji pomidzy rnymi serwerami aplikacyjnymi. Na listingu 8.4 widzimy element
security-role uyty wewntrz deskryptora ejb-jar.xml.
Listing 8.4. Fragment deskryptora ejb-jar.xml, ktry jest przykadem wykorzystania elementu
security-role
<!-- Przykadowy fragment deskryptora ejb-jar.xml -->
<ejb-jar>
<!-- ... -->
<assembly-descriptor>
<security-role>
<description>The single application role</description>
<role-name>TheApplicationRole</role-name>
</security-role>
</assembly-descriptor>
</ejb-jar>
328
Rozdzia 8. Bezpieczestwo
329
Jeli istnieje kilka przecionych metod o tej samej nazwie, to element dotyczy
wszystkich.
Trzeci sposb jest najbardziej dokadny. Pozwala wskaza konkretn
330
Rozdzia 8. Bezpieczestwo
331
332
Opcjonalny element user-data-constraint okrela wymagania, jakie stawiamy warstwie transportowej nadzorujcej poczenie pomidzy klientem a serwerem. Moemy
wybra wariant gwarantujcy integralno przesyanych danych (chronicy dane przed
ich modyfikacj w czasie transmisji) bd poufno danych (osoby trzecie nie bd
w stanie odczyta przesyanych danych). Elementu transport-guarantee okrela sposb ochrony danych w czasie komunikacji na linii klient-serwer. Moemy wybra jedn
z trzech wartoci tego elementu: NONE, INTEGRAL lub CONFIDENTIAL. Wybr pierwszej
opcji, NONE, oznacza, e aplikacja nie wymaga adnej ochrony przesyanych danych.
Opcj INTEGRAL stosujemy wwczas, gdy chcemy, by dane pomidzy serwerem a klientem nie mogy by podczas transportu zmodyfikowane. Warto CONFIDENTIAL zapewni
z kolei, e transmitowane dane s chronione przed ewentualn obserwacj prowadzon przez osoby trzecie. W wikszoci przypadkw wybr opcji INTEGRAL bd CONFIDENTIAL wie si z koniecznoci wczenia obsugi bezpiecznego protokou SSL.
Opcjonalny element login-config suy do definicji metody uwierzytelnienia, dziedziny, ktra ma by zwizana z aplikacj, oraz dodatkowych atrybutw, ktre s wymagane w czasie uwierzytelnienia z uyciem formularza. Model zawartoci tego elementu
zosta przedstawiony na rysunku 8.7.
Rysunek 8.7.
Element login-config
Element podrzdny auth-method okrela mechanizm uwierzytelniania klientw aplikacji sieciowej. Uzyskanie dostpu do dowolnego zasobu sieciowego, ktry jest chroniony, musi by poprzedzone zakoczon powodzeniem operacj uwierzytelnienia. Istniej cztery dopuszczalne wartoci elementu auth-metod: BASIC, DIGEST, FORM i CLIENT-CERT. Element podrzdny realm-name okrela nazw dziedziny uywanej podczas stosowania metod BASIC (podstawowa metoda uwierzytelniania) oraz DIGEST (odmiana metody podstawowej z zastosowaniem funkcji jednokierunkowej). Element podrzdny
form-login-config wskazuje stron logowania i stron bdu, ktre uyte zostan w czasie uycia metody uwierzytelniania bazujcej na formularzu. Jeli natomiast warto
elementu auth-method jest inna ni FORM, to cay wze form-login-config jest ignorowany. Na listingu 8.7 prezentujemy fragment deskryptora web.xml, w ktrym ustalamy, e wszystkie zasoby znajdujce si w katalogu /restricted wymagaj, by uytkownik,
Rozdzia 8. Bezpieczestwo
333
ktry chce si do nich odwoywa, mia przypisan rol AuthorizedUser. Nie ma natomiast adnych wymaga odnonie warstwy transportowej, a uwierzytelnienie dokonywane jest przy uyciu metody podstawowej.
Listing 8.7. Fragment deskryptora web.xml, ktry jest ilustracj uycia elementu security-constraint
<web-app>
<!-- ... -->
<security-constraint>
<web-resource-collection>
<web-resource-name>Secure Content</web-resource-name>
<url-pattern>/restricted/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>AuthorizedUser</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
<!-- ... -->
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>The Restricted Zone</realm-name>
</login-config>
<!-- ... -->
<security-role>
<description>Rola wymagana w celu uzyskania dostpu do zabezpieczonej treci
</description>
<role-name>AuthorizedUser</role-name>
</security-role>
</web-app>
334
Wprowadzenie do JAAS
Podsystem JBossSX bazuje na API JAAS (ang. Java Authentication and Aauthorization
Service). Zrozumienie dziaania implementacji JBossSX wymaga znajomoci podstaw
JAAS API. Dlatego zaczniemy od krtkiego wykadu na temat JAAS, ktry stanowi
przygotowanie do dalszej dyskusji na temat JBossSX.
Rozdzia 8. Bezpieczestwo
335
Pierwsza z nich zwraca wszystkie tosamoci podmiotu. Metoda druga zwraca natomiast tylko te obiekty Principal, ktre s instancjami typu c lub po c dziedzicz. Gdy
obiektw takich nie ma, zwracany jest zbir (Set) pusty. Zwr uwag, e interfejs
java.security.acl.Group jest rozszerzeniem interfejsu java.security.Principal. Dziki
temu, stosujc odpowiednie typy, moemy logicznie grupowa obiekty reprezentujce
tosamo.
Uwierzytelnienie podmiotu
Uwierzytelnienie podmiotu wie si z operacj logowania do JAAS. Procedura logowania skada si z nastpujcych etapw:
1. Aplikacja tworzy instancj typu LoginContext, przekazujc nazw konfiguracji
logowania oraz obiekt implementujcy interfejs CallbackHandler, ktremu
zostanie przekazana tablica obiektw typu Callback, ich zestaw odpowiada
konfiguracji moduu LoginModule.
2. Obiekt LoginContext na podstawie obiektu Configuration ustala list
wszystkich moduw LoginModule, ktre zgodnie z konfiguracj naley
336
Rozdzia 8. Bezpieczestwo
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
337
338
Rozdzia 8. Bezpieczestwo
339
Ostatnim elementem procesu uwierzytelnienia, ktry chcemy opisa, jest interfejs Callback. Moduy typu LoginModule uywaj obiektw typu Callback w celu pobrania informacji wymaganej przez mechanizm uwierzytelnienia. Istnieje kilka predefiniowanych
implementacji tego typu, m.in. NameCallback i PasswordCallback, ktre widzielimy
w zaprezentowanym przed chwil przykadzie. Obiekt LoginModule przekazuje w czasie procesu uwierzytelniania tablic obiektw typu Callback bezporednio do obiektu
CallbackHandler jako parametr metody handle. Jeli aktualnie uywany obiekt typu
CallbackHandler nie wie, jak obsuy ktry z przekazanych mu obiektw typu Callback, zgaszany jest wyjtek UnsupportedCallbackException i proces logowania jest
przerywany.
Rysunek 8.8. Kluczowe interfejsy modelu bezpieczestwa i ich zwizek z elementami kontenera EJB
serwera JBoss
340
Rozdzia 8. Bezpieczestwo
341
Rysunek 8.9.
Zwizek pomidzy
implementacj
podsystemu JBossSX
a warstw kontenera
EJB serwera JBoss
342
Rysunek 8.10.
Podzbir elementw
deskryptorw jboss.xml
oraz jboss-web.xml
odpowiadajcych
za konfiguracj
warstwy bezpieczestwa
Rozdzia 8. Bezpieczestwo
343
domowego, zdalnego, lokalnego domowego i lokalnego. Nie jest wic wymagana implementacja adnego dodatkowego specjalnego interfejsu. Jeli klasa nie implementuje
interfejsu SecurityProxy, jej instancja musi zosta owinita przez implementacj
SecurityProxy, ktra oddeleguje wywoania do odpowiednich metod obiektu. Klasa
org.jboss.security.SubjectSecurityProxy jest przykadem implementacji interfejsu
SecurityProxy i jest uywana w domylnej konfiguracji podsystemu JBossSX.
Spjrzmy teraz na przykad wasnej implementacji interfejsu SecurityProxy w kontekcie bardzo prostego bezstanowego komponentu sesyjnego. Zadaniem naszego obiektu
bdzie nie dopuci do wywoania metody echo w przypadkach, gdy jej argumentem
jest wyraz skadajcy si z czterech liter. Taki rodzaj weryfikacji nie jest moliwy za
pomoc standardowego modelu bezpieczestwa bazujcego na rolach, nie jest bowiem
zwizany z prawami przypisanymi danemu uytkownikowi, dotyczy natomiast argumentw wywoywanej przez niego metody. Kod rdowy naszego porednika o nazwie EchoSecurityProxy znajduje si na listingu 8.8, cay przykad znajduje si wrd
przykadw doczonych do ksiki, w katalogu src\main\org\jboss\chap8\ex1.
Listing 8.8. Klasa EchoSecurityProxy bdca implementacj interfejsu SecurityProxy.
Zadaniem klasy jest weryfikacja wartoci argumentw metody echo
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
package org.jboss.chap8.ex1;
import
import
import
import
java.lang.reflect.Method;
javax.ejb.EJBContext;
org.apache.log4j.Category;
org.jboss.security.SecurityProxy;
/**
* Prosty przykad porednika typu SecurityProxy; demonstruje on weryfikacj
* wartoci atrybutw wywoywanych metod
*
* @author Scott.Stark@jboss.org
* @version $Revision: 1.2 $
*/
public class EchoSecurityProxy implements SecurityProxy {
Category log = Category.getInstance(EchoSecurityProxy.class);
Method echo;
public void init(Class beanHome, Class beanRemote, Object securityMgr)
throws InstantiationException {
init(beanHome, beanRemote, null, null, securityMgr);
}
public void init(Class beanHome, Class beanRemote, Class beanLocalHome,
Class beanLocal, Object securityMgr) throws InstantiationException {
log.debug("init, beanHome=" + beanHome + ", beanRemote=" + beanRemote
+ ", beanLocalhome=" + beanLocalHome + ", beanLocal="
+ beanLocal + ", securityMgr=" + securityMgr);
// pobranie metody echo, ktrej wywoania bdziemy testowa
try {
Class[] params = { String.class };
echo = beanRemote.getDeclaredMethod("echo", params);
344
} catch (Exception e) {
String msg = "Nie znaleziona metoda echo(String)";
log.error(msg, e);
throw new InstantiationException(msg);
}
}
public void setEJBContext(EJBContext ctx) {
log.debug("setEJBContext, ctx=" + ctx);
}
public void invokeHome(Method m, Object[] args) throws SecurityException {
// Nie weryfikujemy dostpu do metod domowych
}
public void invoke(Method m, Object[] args, Object bean)
throws SecurityException {
log.debug("invoke, m=" + m);
// Sprawdzenie wywoania metody echo
if (m.equals(echo)) {
// Kontrola, czy argument skada si z czterech znakw
String arg = (String) args[0];
if (arg == null || arg.length() == 4) {
throw new SecurityException(
"Nieakceptowane s 4-literowe sowa");
}
// Nie wywoujemy metody invoke
}
}
}
Rozdzia 8. Bezpieczestwo
345
Listing 8.9. Deskryptor jboss.xml, ktry wie obiekt porednika bezpieczestwa EchoSecurityProxy
z komponentem EchoBean
<?xml version="1.0"?>
<jboss>
<security-domain>java:/jaas/chap8-ex1</security-domain>
<enterprise-beans>
<session>
<ejb-name>EchoBean</ejb-name>
<jndi-name>chap8.EchoBean</jndi-name>
<security-proxy>org.jboss.chap8.ex1.EchoSecurityProxy</security-proxy>
</session>
</enterprise-beans>
</jboss>
Teraz stworzony przez nas obiekt porednika przetestujemy za pomoc klienta, ktry
wywoa metod echo komponentu EchoBean z dwoma argumentami: "Witaj" i "1234".
Program klienta widzimy poniej:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
package org.jboss.chap8.ex1;
import javax.naming.InitialContext;
import org.apache.log4j.Logger;
/**
* @author Scott.Stark@jboss.org
* @version $Revision: 1.2 $
*/
public class ExClient {
public static void main(String args[]) throws Exception {
Logger log = Logger.getLogger("ExClient");
log.info("Wyszukanie komponentu EchoBean");
InitialContext iniCtx = new InitialContext();
Object ref = iniCtx.lookup("chap8.EchoBean");
EchoHome home = (EchoHome) ref;
Echo echo = home.create();
log.info("Tworzymy obiekt Echo");
log.info("Echo.echo('Witaj') = " + echo.echo("Witaj"));
log.info("Echo.echo('1234') = " + echo.echo("1234"));
}
}
Pierwsze wywoanie metody echo powinno si uda. Drugie natomiast zawiedzie, poniewa argument skada si w tym przypadku z czterech znakw. Klienta uruchamiamy
za pomoc pokazanego poniej polecenia, wchodzc wczeniej do katalogu przyklady:
c:\JBoss\przyklady>ant -Dchap=chap8 -Dex=1 run-example
...
run-example1:
[copy] Copying 1 file to c:\jboss-4.0.1\server\default\deploy
[echo] Waiting for 5 seconds for deploy...
[java] [INFO,ExClient] Wyszukanie komponentu EchoBean
[java] [INFO,ExClient] Tworzymy obiekt Echo
346
Architektura JBossSX
Z dotychczasowej dyskusji na temat oglnych zagadnie dotyczcych bezpieczestwa
serwera JBoss dowiedziae si ju, e podsystem JBossSX stanowi implementacj interfejsw definiujcych warstw bezpieczestwa. Ich poprawna implementacja jest podstawowym zadaniem JBossSX. A szczegy tej implementacji s bardzo interesujce,
poniewa oferuj nam wielk swobod w integrowaniu z istniejc infrastruktur, ktr
moe by zarwno baza danych czy serwer LDAP, jak te wyjtkowo zaawansowany
zestaw oprogramowania nadzorujcy kwestie bezpieczestwa. T elastyczno integracji osignito poprzez zastosowanie modelu moduw uwierzytelniania, ktry dostpny jest w ramach szkieletu JAAS.
Sercem struktury JBossSX jest klasa org.jboss.security.plugins.JaasSecurityManager.
To domylna implementacja interfejsw AuthenticationManager i RealmMapping. Na rysunku 8.11 wida sposb, w jaki JaasSecurityManager wsppracuje z warstw kontenera EJB i kontenera sieciowego, bazujc na elemencie security-domain deskryptora
wdroenia odpowiedniego komponentu.
Rysunek 8.11 przedstawia aplikacj, ktra skada si z komponentw sieciowych oraz
obiektw EJB, a zwizane s one z domen bezpieczestwa o nazwie jwdomain. Kontener sieciowy i kontener EJB korzystaj z usug odpowiadajcego za bezpieczestwo
obiektu przechwytujcego, ktry chroni zawarte w nich komponenty. Instancja uywanego menedera bezpieczestwa ustalana jest w momencie wdraania aplikacji, na
podstawie wartoci elementu security-domain, ktry znajduje si w deskryptorach
jboss.xml oraz jboss-web.xml. Na tej podstawie obiekt przechwytujcy odwouje si do
Rozdzia 8. Bezpieczestwo
347
Rysunek 8.11.
Zalenoci midzy
wartoci security-domain deskryptora,
kontenerami
oraz menederem
bezpieczestwa
JaasSecurityManager
348
Rozdzia 8. Bezpieczestwo
Rysunek 8.12.
Kroki skadajce
si na proces
uwierzytelnienia
i autoryzacji dotyczcy
wywoania metody
obiektu domowego
komponentu EJB
349
350
Rozdzia 8. Bezpieczestwo
351
jako bezstanowy atrybut dania, ktry musi by przekazany i sprawdzony przy kadej operacji. A w czasie intensywnej komunikacji pomidzy klientem i serwerem czynnoci te mog okaza si kosztowne. Dlatego te obiekt JaasSecurityManager wprowadza pojcie bufora uwierzytelniania, w ktrym przechowywane s informacje dotyczce
poprzednich, zakoczonych powodzeniem operacji logowania. Moemy nawet w ramach konfiguracji JaasSecurityManager wskaza obiekt, ktry bdzie peni funkcj takiego bufora, piszemy o tym w kolejnym punkcie. Jeli elementu tego nie zdefiniujemy,
uyty bdzie bufor domylny przechowujcy wspomniane dane przez okrelony czas.
Komponent JaasSecurityManagerService
Komponent MBean JaasSecurityManagerService to usuga zarzdzajca menederami bezpieczestwa. I cho nazwa komponentu zaczyna si od Jaas, to zarzdzane
przez ni menedery bezpieczestwa nie musz w swej implementacji odwoywa si
do usug JAAS. Nazwa wzia si std, e domylnym menederem bezpieczestwa
jest obiekt JaasSecurityManager. Podstawowym zadaniem usugi JaasSecurityManagerService jest moliwo uycia zewntrznej implementacji menedera bezpieczestwa.
Wystarczy w tym celu zaproponowa now, alternatywn implementacj interfejsw
AuthenticationManager i RealmMapping.
Drugim, fundamentalnym zadaniem usugi JaasSecurityManagerService jest zaoferowanie implementacji typu javax.naming.spi.ObjectFactory, ktra pozwala na proste
i niewymagajce pisania kodu tworzenie na poziomie JNDI przyporzdkowa miedzy
nazw a implementacj menedera bezpieczestwa. Dziki temu, jak ju wspominalimy wczeniej, istnieje moliwo wczenia mechanizmu bezpieczestwa poprzez wskazanie nazwy JNDI konkretnej implementacji menedera bezpieczestwa, a wszystko
to na poziomie elementu security-domain deskryptora wdroenia. Jednak uycie JNDI
wymaga poprawnego przyporzdkowania nazwy do obiektu. By uproci operacj
nadawania nazwy menederowi bezpieczestwa, usuga JaasSecurityManagerService
obsuguje proces wizania tego obiektu z instancj ObjectFactory w ramach kontekstu
java:/jaas. Pozwala to stosowa konwencj, w ktrej przypisanie elementowi security-element nazwy java:/jaas/XYZ wiza si bdzie ze stworzeniem menedera bezpieczestwa w domenie XYZ. Meneder bezpieczestwa dla domeny XYZ powstanie w momencie wystpienia pierwszego odwoania do nazwy java:/jaas/XYZ, a stworzona zostanie instancja klasy okrelonej atrybutem SecurityManagerClassName. Argumentem
jej konstruktora bdzie nazwa domeny bezpieczestwa. Spjrz na fragment konfiguracji
kontenera:
<jboss>
<!-- Wszystkie kontenery nale do domeny "hades" -->
<security-domain>java:/jaas/hades</security-domain>
<!-- ... -->
</jboss>
352
Komponent JaasSecurityManagerService jest domylnie skonfigurowany w ramach standardowej dystrybucji serwera JBoss. I czsto korzystamy z tej wanie konfiguracji.
Cay czas jednak istnieje moliwo modyfikacji tych ustawie, dlatego te poniej prezentujemy list atrybutw komponentu JaasSecurityManagerService:
SecurityManagerClassName nazwa klasy bdcej implementacj menedera
bezpieczestwa. Klasa ta musi obsugiwa interfejsy org.jboss.security.
AuthenticationManager oraz org.jboss.security.RealmMapping. Gdy nie
Rozdzia 8. Bezpieczestwo
353
JaasSecurityManagerService oferuje take zbir przydatnych operacji. Wrd nich znajdziemy funkcj pozwalajc wyzerowa bufor danych uwierzytelniajcych w czasie
dziaania aplikacji oraz funkcj zwracajc list uytkownikw, ktrych dane znajduj
si w buforze. Istnieje te moliwo wywoania dowolnej metody zdefiniowanej w ramach interfejsu menedera bezpieczestwa.
Oprnienie bufora zwizanego z okrelon domen bezpieczestwa wie si ze skasowaniem wszystkich danych uwierzytelniajcych przechowywanych w pamici. Operacja taka moe by potrzebna na przykad w chwili, gdy zmienilimy pewne ustawienia
zwizane z bezpieczestwem i chcemy, by zaczy one obowizywa natychmiast.
W takich wanie przypadkach moemy wywoa metod o nastpujcej sygnaturze:
public void flushAuthenticationCache(String securityDomain). Poniej prezentujemy fragment kodu, w ktrym korzystamy z tej operacji:
MBeanServer server = ...;
String jaasMgrName = "jboss.security:service=JaasSecurityManager";
ObjectName jaasMgr = new ObjectName(jaasMgrName);
Object[] params = {domainName};
String[] signature = {"java.lang.String"};
server.invoke(jaasMgr, "flushAuthenticationCache", params, signature);
A oto lista kilku kolejnych metod, ktre oferuje nam meneder bezpieczestwa:
public boolean isValid(String securityDomain, Principal principal, Object credential);
public Principal getPrincipal(String securityDomain, Principal principal);
public boolean doesUserHaveRole(String securityDomain, Principal principal,
Object credential, Set roles);
public Set getUserRoles(String securityDomain, Principal principal, Object credential);
S to metody odpowiadajce metodom zdefiniowanym w ramach interfejsw AuthenticationManager i RealmMapping i dotycz domeny bezpieczestwa okrelonej wartoci
parametru securityDomain.
Komponent JaasSecurityDomain
Komponent org.jboss.security.plugins.JaasSecurityDomain stanowi rozszerzon
wersj JaasSecurityManager, ktr uzupeniono o obsug magazynu kluczy, zgodn
z JSSE fabryk KeyManagerFactory, fabryk TrustManagerFactory obsugujc protok SSL oraz inne funkcje zwizane z szyfrowaniem danych. Pojawiy si te nowe
atrybuty pozwalajce konfigurowa usug JaasSecurityDomain:
354
jest po prostu hasem, nie wystpuj tutaj takie opcje jak w przypadku atrybutu
KeyStorePass.
Rozdzia 8. Bezpieczestwo
355
Atrybut name elementu application-policy to nazwa konfiguracji logowania. Odpowiada ona wartoci elementu security-domain deskryptorw jboss.xml i jboss-web.xml
chodzi o warto, ktra poprzedzona jest prefiksem java:/jaas/. Atrybut code
elementu login-module wskazuje nazw klasy implementujcej modu logowania. Atrybut flag steruje oglnym zachowaniem stosu uwierzytelniania. Oto moliwe jego wartoci wraz z krtk charakterystyk:
356
Rozdzia 8. Bezpieczestwo
357
Parametr objectName wskazuje odpowiedni usug MBean na tej samej zasadzie jak
atrybut LoginConfig. Do usunicia biecej konfiguracji suy metoda:
public void popLoginConfig() throws JMException;
358
org.jboss.security.auth.spi.IdentityLoginModule
IdentityLoginModule jest prostym moduem logowania, ktry czy tosamo okrelon w opcjach z dowolnym podmiotem uwierzytelnionym w ramach moduu. Tworzona jest instancja SimplePrincipal, ktra posuguje si nazw okrelon przez parametr principal. Oczywicie opisywane rozwizanie nie nadaje si do zastosowania
w wymagajcym wysokiego stopnia bezpieczestwa rodowisku produkcyjnym, moemy jednak wykorzysta je w czasie tworzenia i testowania aplikacji, gdy chcemy
sprawdzi zabezpieczenia zwizane z okrelon tosamoci i przypisanymi jej rolami.
Rozdzia 8. Bezpieczestwo
359
<policy>
<application-policy name="testIdentity">
<authentication>
<login-module code="org.jboss.security.auth.spi.IdentityLoginModule"
flag="required">
<module-option name="principal">jduke</module-option>
<module-option name="roles">TheDuke,AnimatedCharater</module-option>
</login-module>
</authentication>
</application-policy>
</policy>
org.jboss.security.auth.spi.UsersRolesLoginModule
UsersRolesLoginModule to nieskomplikowany modu logowania obsugujcy wielu uytkownikw i wiele rl. Dane te znajduj si w plikach waciwoci Javy. Hasa przypisane poszczeglnym uytkownikom znajduj si w pliku o nazwie users.properties,
natomiast ich role zdefiniowane s w pliku roles.properties. Zawarto obu plikw adowana jest w czasie inicjalizacji, w ramach metody initialize wywoywanej przez
kontekstowego classloadera wtku. Oznacza to, e wymienione pliki mog by umieszczone w archiwum JAR wraz z aplikacj J2EE, w katalogu konfiguracyjnym JBoss,
bd te w dowolnym innym katalogu w ramach serwera lub cieki poszukiwania.
Gwnym zadaniem moduu jest umoliwienie atwego testowania bezpieczestwa aplikacji w sytuacji, w ktrej istnieje wielu zdefiniowanych uytkownikw i wiele rl.
Wszystko to za pomoc plikw waciwoci doczonych do aplikacji.
360
ktry suy bdzie do haszowania hase. Poniewa nie jest przewidziana adna
warto domylna, wczenie haszowania wie si z koniecznoci ustalenia
wartoci parametru. Gdy parametr hashAlgorithm jest ustalony, haso w postaci
otwartego tekstu otrzymane za pomoc metody callbackHandler jest haszowane
przed dalszym przekazaniem go w roli argumentu inputPassword metody
UsernamePasswordLoginModule.validatePassword. Warto expectedPassword,
znajdujca si w pliku waciwoci users.properties, musi by haszowana
w ten sam sposb.
hashEncoding format haszowanego hasa. Parametr moe by jedn
z nastpujcych wartoci: base64 lub hex. Warto domylna to base64.
hashCharset opcja okrela sposb kodowania hasa z postaci tekstowej
Rozdzia 8. Bezpieczestwo
361
<policy>
<application-policy name="testUsersRoles">
<authentication>
<login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
flag="required">
<module-option name="usersProperties">usersb64.properties</moduleoption>
<module-option name="hashAlgorithm">MD5</module-option>
<module-option name="hashEncoding">base64</module-option>
<module-option name="unauthenticatedIdentity">nobody</module-option>
</login-module>
</authentication>
</application-policy>
</policy>
org.jboss.security.auth.spi.LdapLoginModule
LdapLoginModule to implementacja moduu logowania, ktra w czasie uwierzytelnia-
nia klienta uywa serwera LDAP. Korzystamy w tym przypadku z loginu JNDI oraz
odpowiednich ustawie konfiguracyjnych moduu. Moduem LdapLoginModule naley
posugiwa si wwczas, gdy dane uytkownika i dotyczce go informacje uwierzytelniajce s przechowywane na serwerze LDAP, a dostp do niego zapewnia okrelony
dostawca JNDI.
Informacje dotyczce sposobu czenia si z serwerem LDAP zawarte s w opcjach
konfiguracyjnych i su do prawidowego stworzenia kontekstu pocztkowego JNDI.
Poniej widzimy list parametrw dotyczcych czenia z LDAP za pomoc JNDI:
java.naming.factory.initial nazwa klasy bdcej implementacj interfejsu
InitialContextFactory. Domylnie jest to dostawca LDAP firmy Sun, klasa
com.sun.jndi.ldap.LdapCtxFactory.
java.naming.provider.url URL serwera LDAP.
java.naming.security.authentication poziom okrelajcy stopie
bezpieczestwa. Wartoci domyln jest simple.
java.naming.security.protocol parametr wskazuje na protok stosowany
przy bezpiecznym dostpie, np. ssl.
java.naming.security.principal tosamo uwierzytelniajca klienta
362
Rozdzia 8. Bezpieczestwo
363
364
Rozdzia 8. Bezpieczestwo
365
dn: cn=JBossAdmin,ou=Roles,dc=jboss,dc=org
objectclass: top
objectclass: groupOfNames
cn: JBossAdmin
member: uid=jduke,ou=People,dc=jboss,dc=org
description: the JBossAdmin group
366
org.jboss.security.auth.spi.DatabaseServerLoginModule
DatabaseServerLoginModule jest implementacj moduu logowania wykorzystujce-
Pierwsza z tych tabel Principals kojarzy PrincipalID uytkownika z poprawnym hasem. Z kolei tabela Roles kojarzy PrincipalID uytkownika ze zbiorem rl.
Role suce do okrelania uprawnie uytkownika musz by zapisywane w wierszach, w kolumnie RoleGroup. Tabele te s logiczne w tym sensie, i istnieje moliwo
podania zapytania SQL, ktre bdzie uywane przez modu logowania. Jedyny wymg
sprowadza si do tego, by zwracany obiekt java.sql.ResultSet mia identyczn struktur jak przedstawione powyej dwie tabele: Principals oraz Roles. Rzeczywiste nazwy
tabel oraz ich kolumn nie maj tu wikszego znaczenia, gdy wyniki s odczytywane
przy wykorzystaniu indeksw kolumn, a nie ich nazw. Aby dokadniej wyjani, co to
oznacza, przeanalizujemy przykad bazy danych zawierajcej dwie tabele Principals oraz Roles o przedstawionej wczeniej strukturze. Pierwsze z przedstawionych
poniej polece SQL zapisuje w tabeli Principals wiersz danych, ktry w kolumnie
PrincipalID zawiera warto java, a w kolumnie Password warto echoman. Pozostae dwa polecenia zapisuj dwa wiersze w tabeli Roles. W pierwszym z nich w polu
PrincipalID zostaje umieszczona warto java, w polu Roles okrelajcym nazw roli
warto Echo, a w polu RoleGroup warto Roles; w drugim z rekordw w tych samych
kolumnach zostan odpowiednio zapisane wartoci: java, caller_java oraz CallerPrincipal.
INSERT INTO Principals VALUES('java', 'echoman')
INSERT INTO Roles VALUES('java', 'Echo', 'Roles')
INSERT INTO Roles VALUES('java', 'caller_java', 'CallerPrincipal')
To polecenie zostanie zastosowane, jeli warto opcji nie bdzie jawnie podana.
rolesQuery ta opcja okrela przygotowane zapytanie SQL stanowice
odpowiednik zapytania select Role, RoleGroup from Roles where
PrincipalID=?. To polecenie zostanie zastosowane, jeli warto opcji
Rozdzia 8. Bezpieczestwo
367
368
BaseCertLoginModule
BaseCertLoginModule jest moduem, ktry przeprowadza uwierzytelnianie uytkownikw na podstawie certyfikatw X509. Zazwyczaj modu ten jest uywany przez warstw sieciow korzystajc z metody uwierzytelniania CLIENT-CERT. Modu ten suy
wycznie do uwierzytelniania, dlatego te, w celu penego zdefiniowania dostpu do
zabezpieczonego komponentu sieciowego lub komponentu EJB, naley wykorzystywa go wsplnie z innym moduem logowania, ktry bdzie w stanie pobiera informacje o rolach konieczne do autoryzacji uytkownika. Dwie klasy pochodne tego
moduu, CertRolesLoginModule oraz DatabaseCertLoginModule, rozszerzaj jego dziaanie i zapewniaj moliwo pobierania rl z waciwoci lub z bazy danych.
Do przeprowadzenia weryfikacji uytkownika modu BaseCertLoginModule musi korzysta z obiektu KeyStore. Obiekt ten jest pobierany przy uyciu implementacji interfejsu org.jboss.security.SecurityDomain. Przewanie implementacja klasy SecurityDomain jest konfigurowana przy uyciu komponentu MBean org.jboss.security.
plugins.JaasSecurityDomain, przedstawionego na poniszym przykadzie pliku jboss-serice.xml:
<mbean code="org.jboss.security.plugins.JaasSecurityDomain"
name="jboss.web:service=SecurityDomain">
<constructor>
<arg type="java.lang.String" value="jmx-console"/>
</constructor>
<attribute name="KeyStoreURL">resource:localhost.keystore</attribute>
<attribute name="KeyStorePass">unit-tests-server</attribute>
</mbean>
Rozdzia 8. Bezpieczestwo
369
<security-constraint>
<web-resource-collection>
<web-resource-name>HtmlAdaptor</web-resource-name>
<description>Przykadowa konfiguracja bezpieczestwa pozwalajca
uytkownikom posiadajcym rol JBossAdmin na dostp do aplikacji sieciowej
JMX console </description>
<url-pattern>/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>JBossAdmin</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>CLIENT-CERT</auth-method>
<realm-name>JBoss JMX Console</realm-name>
</login-config>
<security-role>
<role-name>JBossAdmin</role-name>
</security-role>
</web-app>
Ostatnim krokiem jest zdefiniowanie konfiguracji moduu logowania dla okrelonej powyej domeny bezpieczestwa jmx-console. Niezbdne informacje s umieszczane
w pliku conf/login-config.xml:
<application-policy name="jmx-console">
<authentication>
<login-module code="org.jboss.security.auth.spi.BaseCertLoginModule"
flag="required">
<module-option name="password-stacking">useFirstPass</module-option>
<module-option name="securityDomain">java:/jaas/jmx-console</module-option>
</login-module>
<login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
flag="required">
<module-option name="password-stacking">useFirstPass</module-option>
<module-option name="usersProperties">jmx-console-users.properties</
module-option>
<module-option name="rolesProperties">jmx-console-roles.properties</
module-option>
</login-module>
</authentication>
</application-policy>
W tym przypadku modu BaseCertLoginModule jest uywany do uwierzytelniania certyfikatu uytkownika, natomiast ze wzgldu na zastosowanie opcji password-stacking=
useFirstPass modu UserRolesLoginModule jest uywany wycznie do autoryzacji.
370
org.jboss.security.auth.spi.RunAsLoginModule
JBoss posiada pomocniczy modu logowania o nazwie RunAsLoginModule, ktry pozwala na zastosowanie roli pomocniczej podczas trwania fazy uwierzytelniania i zaprzestanie stosowania tej roli w momencie zakoczenia uwierzytelniania (niezalenie
od jego wyniku). Modu ten zosta stworzony w celu udostpnienia roli, z jakiej mogyby korzysta inne moduy logowania, ktre podczas przeprowadzania uwierzytelniania musz mie dostp do zasobw chronionych. Na przykad z moduu RunAsLoginModule moe korzysta modu logowania korzystajcy z chronionego komponentu EJB.
Modu RunAsLogingModule musi zosta skonfigurowany przed zastosowaniem innych
moduw logowania korzystajcych z roli pomocniczej.
Jedyn opcj konfiguracyjn tego moduu jest roleName; zawiera ona nazw roli
pomocniczej, ktra bdzie uywana podczas fazy logowania. Jeli nazwa tej roli nie
zostanie jawnie podana, przyjta zostanie warto domylna nobody.
org.jboss.security.ClientLoginModule
Modu ClientLoginModule jest implementacj interfejsu LoginModule uywanego przez
klientw JBossa do okrelenia tosamoci oraz informacji uwierzytelniajcych klienta. Modu ten zapisuje we waciwoci org.jboss.security.SecurityAssociation.
principal warto typu NameCallback zwrcon przez metod callbackhandler, a we
waciwoci org.jboss.security.SecurityAssociation.credential zwrcon warto
typu PasswordCallback. Jest to jedyny dostpny mechanizm pozwalajcy klientowi na
Rozdzia 8. Bezpieczestwo
371
okrelenie, kto odwoa si do biecego wtku. Moduu tego musz uywa zarwno
niezalene aplikacje klienckie, jak i aplikacje dziaajce w rodowisku serwera, ktre
funkcjonuj jako klienty EJB w sytuacjach, gdy rodowisko zabezpiecze nie zostao
skonfigurowane w sposb zapewniajcy moliwo niezauwaalnego korzystania
z podsystemu JBossSX. Oczywicie zawsze mona bezporednio okreli informacje
org.jboss.security.SecurityAssociation, niemniej jednak interfejs ten jest uwaany
za API wewntrzne, ktre w kadej chwili moe ulec zmianie bez wczeniejszych zapowiedzi.
Naley zauway, e ten modu logowania nie przeprowadza uwierzytelniania, a jedynie kopiuje przekazane do niego informacje dotyczce logowania do warstwy wywoa EJB serwera JBoss w celu ich pniejszego wykorzystania podczas uwierzytelniania. Jeli niezbdne jest przeprowadzenie uwierzytelniania uytkownika po stronie
klienta, to oprcz moduu ClientLoginModule naley wykorzysta take inny modu
logowania.
Poniej zostay opisane dostpne opcje konfiguracyjne tego moduu:
multi-threaded jeli tej opcji zostanie przypisana warto true,
372
getPrincipals(),
getPrincipals(java.lang.Class c),
getPrivateCredentials(),
getPrivateCredentials(java.lang.Class c),
getPublicCredentials(),
getPublicCredentials(java.lang.Class c).
Rozdzia 8. Bezpieczestwo
373
374
*
*
*
*
Rozdzia 8. Bezpieczestwo
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102: }
375
/**
* Jeli uyto wartoci "useFirstPass", to metoda ta poszukuje w mapie
* sharedState wartoci javax.security.auth.login.name oraz
* javax.security.auth.login.password i zwraca warto true, jeli
* zostay one odnalezione. Jeli wartoci te nie istniej lub wynosz
* null, to metoda zwraca warto false.
*
* Naley zauway, e w przypadku pomylnego logowania klasy pochodne
* przesaniajce metod login() musz przypisywa skadowej loginOk
* warto true, aby w pniejszej fazie logowania w obiekcie
* Subject zostay poprawnie zapisane informacje. Ta implementacja
* przypisuje skadowej loginOk warto true, jeli metoda login() zwrci
* warto true; w przeciwnym razie skadowej loginOk przypisywana jest
* warto false.
*/
public boolean login()
throws LoginException
{
// ...
}
/**
* Ta metoda jest przesaniana przez klasy pochodne, tak by zwracaa
* obiekt Principal odpowiadajcy podstawowej tosamoci uytkownika.
*/
abstract protected Principal getIdentity();
/**
* Ta metoda, przesaniana przez klasy pochodne, zwraca obiekt Groups
* zawierajcy zbir rl przypisanych danemu uytkownikowi. W najprostszym
* przypadku klasy pochodne powinny utworzy obiekt Group skojarzony z
* nazw "Roles" i zawierajcy role przypisane danemu uytkownikowi.
* Drug powszechnie uywan grup jest "CallerPrincipal" okrelajca
* tosamo uytkownika w danej aplikacji, a nie w domenie bezpieczestwa.
*
* @return Group[] containing the sets of roles
*/
abstract protected Group[] getRoleSets() throws LoginException;
376
Rozdzia 8. Bezpieczestwo
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94: }
377
Decyzja, ktr z klas bazowych AbstractServerLoginModule bd UsernamePasswordLoginModule naley zastosowa, sprowadza si do okrelenia, czy technologia uwierzytelniania, na potrzeby ktrej tworzony jest nowy modu logowania, zezwala na podawanie nazwy uytkownika oraz danych potwierdzajcych jego tosamo w formie
acuchw znakw. Jeli dane acuchowe mog by uywane, to naley tworzy modu
logowania w oparciu o klas UsernamePasswordLoginModule; w pozostaych sytuacjach
naley zastosowa klas AbstractServerLoginModule.
378
Czynnoci, jakie naley wykona podczas tworzenia niestandardowego moduu logowania, zale od zastosowanej abstrakcyjnej klas bazowej. Prac nad moduem logowania, ktry bdzie si integrowa z infrastruktur zabezpiecze, naley rozpocz od
stworzenia klasy dziedziczcej po AbstracServerLoginModule lub UsernamePasswordLoginModule; dziki temu mona mie pewno, e informacje o uwierzytelnionym
uytkowniku zwrcone w formie obiektu Principal bd mogy zosta wykorzystane
przez JBossSX.
W przypadku tworzenia moduu logowania dziedziczcego po AbstractServerLoginModule naley przesoni nastpujce metody:
void initialize(Subject,CallbackHandler,Map,Map) metoda ta jest
oczekiwanego hasa dla biecej nazwy uytkownika, ktr mona okreli przy
uyciu metody getUsername(). Metoda getUserPassword() jest wywoywana
wewntrz metody login() po tym, jak metoda zwrotna callbackhandler zwrci
nazw uytkownika oraz podane przez niego haso.
Rozdzia 8. Bezpieczestwo
379
380
Rozdzia 8. Bezpieczestwo
381
Kod przykadu zawiera take prosty komponent sesyjny sucy do testowania przedstawionego powyej moduu logowania. Aby przygotowa, wdroy i uruchomi ten
przykad, naley przej do katalogu zawierajcego materiay doczone do ksiki i wykona nastpujce polecenie:
C:\JBoss\przyklady>ant -Dchap=chap8 -Dex=2 run-example
...
run-example2:
[copy] Copying 1 file to /tmp/jboss-4.0.1/server/default/deploy
[echo] Waiting for 5 seconds for deploy...
[java] [INFO,ExClient] Logowanie z uyciem danych: nazwa=jduke, haso=theduke
[java] [INFO,ExClient] Poszukiwanie EchoBean2
[java] [INFO,ExClient] Utworzono Echo
[java] [INFO,ExClient] Echo.echo('Witamy') = Witamy
19:06:13,266 INFO [EjbModule] Deploying EchoBean2
19:06:13,482 INFO [JndiStore] Start, bound security/store
19:06:13,486 INFO [SecurityConfig] Using JAAS AuthConfig:
jar:file:/private/tmp/jboss-4.0.1/
server/default/tmp/deploy/tmp23012chap8-ex2.jar-contents/chap8-ex2.sar!/META-INF/
login-config.xml
19:06:13,654 INFO [EJBDeployer] Deployed: file:/private/tmp/jboss-4.0.1/server/
default/deploy/chap8-ex2.jar
To, czy do uwierzytelniania uytkownikw po stronie serwera bdzie wykorzystywany niestandardowy modu logowania JndiUserAndPass, jest okrelane przez konfiguracj logowania przykadowej domeny bezpieczestwa. Domena bezpieczestwa jest
definiowana w pliku JAR META-INF/jboss.xml w nastpujcy sposb:
<?xml version="1.0"?>
<jboss>
<security-domain>java:/jaas/chap8-ex2</security-domain>
</jboss>
Deskryptor pliku SER META-INF/login-config.xml definiuje konfiguracj moduu logowania w nastpujcy sposb:
<application-policy name = "chap8-ex2">
<authentication>
<login-module code="org.jboss.chap8.ex2.JndiUserAndPass"
flag="required">
<module-option name = "userPathPrefix">/security/store/password</
module-option>
<module-option name = "rolesPathPrefix">/security/store/roles</moduleoption>
</login-module>
</authentication>
</application-policy>
382
Usuga DynamicLoginConfig
Domeny bezpieczestwa zdefiniowane w pliku login-config.xml s w zasadzie statyczne. Informacje o nich s odczytywane podczas uruchamiania serwera JBoss, jednak
nie ma adnej moliwoci pniejszego dodania nowej domeny bezpieczestwa lub
zmodyfikowania informacji o domenie ju zdefiniowanej. Na dynamiczne wdraanie
domen bezpieczestwa pozwala jednak usuga DynamicLoginConfig. Dziki temu moliwe jest okrelenie konfiguracji logowania JAAS jako jednego z elementw wdroenia (bd te jako niezalenej usugi) i nie trzeba ju rcznie wprowadza modyfikacji
w pliku login-config.xml.
Usuga DynamicLoginConfig udostpnia nastpujce atrybuty:
AuthConfig cieka okrelajca plik konfiguracyjny logowania, ktry ma
Rozdzia 8. Bezpieczestwo
383
Protok
Secure Remote Password (SRP)
Protok SRP stanowi implementacj sposobu wymiany kluczy publicznych opisanego w pliku RFC 2945. Poniej przedstawiony zosta wycig z tego dokumentu:
Ten dokument opisuje mocny pod wzgldem kryptograficznym mechanizm
uwierzytelniania sieciowego nazywany protokoem Secure Remote Password
(SRP). Mechanizm ten nadaje si do negocjowania bezpiecznych pocze
sieciowych przy wykorzystaniu hasa podanego przez uytkownika,
a jednoczenie eliminuje tradycyjne problemy zwizane ze stosowaniem
hase uywanych wielokrotnie. Prezentowany system w ramach procesu
uwierzytelniania przeprowadza take bezpieczn wymian kluczy, dziki
czemu warstwy bezpieczestwa (zabezpieczenia prywatnoci oraz integralnoci)
mog by wczone w czasie trwania sesji. Korzystanie z prezentowanego
mechanizmu nie stwarza koniecznoci wykorzystywania zaufanych serwerw
kluczy ani infrastruktury zarzdzajcej certyfikatami, a klienty nie musz ani
przechowywa, ani zarzdza kluczami uywanymi przez duszy czas.
W porwnaniu z istniejcymi technikami typu wyzwanie-odpowied protok
SRP wykazuje wiele zalet, i to zarwno pod wzgldem bezpieczestwa,
jak i stosowania. Dziki temu doskonale si on nadaje do zastosowania
w rozwizaniach wymagajcych bezpiecznego uwierzytelniania przy
uyciu hasa.
Kompletn specyfikacj zawart w pliku RFC 2945 mona znale na witrynie
www.rfc-editor.org/rfc.html. Dodatkowe informacje dotyczce algorytmu SRP oraz jego historii s dostpne na witrynie http://srp.stanford.edu/.
384
i dostpny jedynie dla nas. Kiedy kto chce wysa do drugiej osoby zaszyfrowan informacj, szyfruje j przy uyciu klucza publicznego adresata. Tylko adresat bdzie
w stanie odszyfrowa t informacj, posugujc si swoim kluczem prywatnym. Rozwizanie to rni si od stosowanych wczeniej algorytmw szyfrowania wykorzystujcych klucz wsplny, ktre wymagay, by nadawca wiadomoci oraz jej odbiorca posugiwali si tym samym, wsplnym kluczem. Algorytmy klucza publicznego eliminuj
konieczno stosowania wsplnych hase.
Podsystem JBossSX zawiera implementacje protokou SRP skadajc si z nastpujcych elementw:
Implementacji protokou SRP z potwierdzeniem, ktra jest niezalena
Rozdzia 8. Bezpieczestwo
385
Rysunek 8.14. Komponenty implementacji protokou SRP stosowane po stronie klienta oraz serwera
externalRandomA ta opcja jest flag przyjmujc wartoci true lub false,
ktra okrela, czy metoda zwrotna klienta powinna zwraca losowo wybrany
fragment klucza publicznego A klienta. Metody tej mona uywa do podawania
mocnej pod wzgldem kryptograficznym liczby losowej odczytywanej,
na przykad, z jakiego urzdzenia.
hasAuxChallenge ta opcja jest flag przyjmujca wartoci true lub false,
386
Aby informacje uwierzytelniajce uywane przez protok SRP mogy by zastosowane w celu okrelenia moliwoci dostpu do komponentw J2EE zwizanych z systemem bezpieczestwa, modu SRPLoginModule musi by uywany razem ze standardowym moduem logowania ClientLoginModule. Poniej przedstawiony zosta fragment
wpisu konfigurujcego logowanie, ktry zapewnia wsplne wykorzystanie obu tych
moduw logowania:
srp {
org.jboss.security.srp.jaas.SRPLoginModule required
srpServerJndiName="SRPServerInterface"
;
org.jboss.security.ClientLoginModule required
password-stacking="useFirstPass"
;
};
Jeli atrybut ten nie zosta podany jawnie, przyjmie domyln warto
RMIClientSocketFactory.
Rozdzia 8. Bezpieczestwo
387
Jeli atrybut ten nie zosta podany jawnie, przyjmie domyln warto
RMIServerSocketFactory.
AuthenticationCacheTimeout atrybut okrela wyraony w sekundach czas
przechowywania danych w buforze. Jego domyln wartoci jest 1800.
AuthenticationCacheResolution atrybut ten okrela, jak czsto naley
388
Rozdzia 8. Bezpieczestwo
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56: }
389
Podstawowym zadaniem klasy implementujcej interfejs SRPVerifierStore jest zapewnienie dostpu do obiektu SRPVerifierStore.VerifierInfo odpowiadajcego podanej nazwie uytkownika. Na pocztku sesji SRP obiekt SRPService wywouje metod
getUserVerifier(String) w celu pobrania parametrw niezbdnych do dziaania algorytmu wykorzystywanego przez protok SRP. Poniej opisane zostay elementy skadowe VerifierInfo:
username nazwa uytkownika lub identyfikator uywany podczas logowania.
verifier skrt (niemoliwy do odszyfrowania) hasa lub numeru
rzecz biorc, warto tej skadowej nie musi by okrelana niezalenie dla
kadego uytkownika, lecz by powszechnie znana. Klasa pomocnicza
org.jboss.security.srp.SRPConf posiada kilka ustawie tej skadowej,
w tym take dobr warto domyln, ktr mona pobra przy uyciu
metody SRPConf.getDefaultParams().g().
390
uwierzytelnianie.
Rozdzia 8. Bezpieczestwo
391
tworzenia zostaje uyta nazwa uytkownika, jego haso oraz parametry SRP
pobrane w poprzednim kroku. Nastpnie klient tworzy losow liczb A,
ktra zostanie uyta do utworzenia klucza prywatnego sesji SRP. Kolejn
czynnoci, jak wykonuje klient, jest zainicjowanie operacji wykonywanych
po stronie serwera. W tym celu wywoywana jest metoda SRPServerInterface.
init, do ktrej zostaje przekazana nazwa uytkownika oraz wygenerowana
przez klienta losowa liczba A. Nastpnie serwer generuje swoj liczb losow
B i przekazuje j klientowi. Czynnoci te odpowiadaj wymianie kluczy
publicznych.
4. Modu logowania dziaajcy po stronie klienta pobiera prywatny klucz sesji SRP,
392
Cho protok SRP ma wiele bardzo interesujcych cech, niemniej jednak wci stanowi on rozwijajcy si element infrastruktury JBossSX i posiada kilka ogranicze,
o ktrych naley wiedzie. Oto one:
Ze wzgldu na sposb, w jaki JBoss odcza protok transportu metod
Przykad SRP
W niniejszym rozdziale przedstawionych zostao stosunkowo duo informacji na temat
protokou SRP, nadszed wic czas, by przedstawi przykad demonstrujcy jego zastosowanie. Zamieszczony przykad prezentuje autoryzacj uytkownikw przeprowadzan
po stronie klienta przy wykorzystaniu SRP, jak rwnie pniejsze korzystanie z prostego komponentu EJB, podczas ktrego rol informacji uwierzytelniajcych uytkownika peni wyzwanie sesji SRP. Kod testowy realizuje wdroenie pliku JAR komponentu EJB zawierajcego archiwum SAR suce do skonfigurowania moduu
Rozdzia 8. Bezpieczestwo
393
Rysunek 8.15.
Diagram sekwencji
ilustrujcy interakcj
pomidzy obiektem
SRPCacheLoginMod
ule oraz pamici
podrczn sesji SRP
logowania dziaajcego po stronie serwera oraz usug SRP. Podobnie jak w poprzednich przykadach take i w tym konfiguracja moduu logowania dziaajcego po
stronie serwera zostanie zainstalowana dynamicznie, przy uyciu komponentu MBean
SecurityConfig. Przedstawiony przykad wykorzystuje take niestandardow implementacj interfejsu SRPVerifierStore, ktra posuguje si magazynem przechowywanym
w pamici i inicjowanym przez dane zapisane w pliku waciwoci, a nie w magazynie obiektw serializowanych (jakiego uywa klasa SRPVerifierStoreService). Ta niestandardowa klasa nosi nazw org.jboss.chap8.ex3.service.PropertiesVerifierStore. Ponisza lista przedstawia zawarto pliku JAR, w ktrym zosta umieszczony
przykadowy komponent EJB oraz usugi SRP:
C:\JBoss\przyklady>java -cp output/classes ListJar output/chap8/chap8-ex3.jar
output/chap8/chap8-ex3.jar
+- META-INF/MANIFEST.MF
+- META-INF/ejb-jar.xml
+- META-INF/jboss.xml
+- org/jboss/chap8/ex3/Echo.class
+- org/jboss/chap8/ex3/EchoBean.class
+- org/jboss/chap8/ex3/EchoHome.class
+- roles.properties
+- users.properties
+- chap8-ex3.sar (archive)
| +- META-INF/MANIFEST.MF
| +- META-INF/jboss-service.xml
| +- META-INF/login-config.xml
| +- org/jboss/chap8/ex3/service/PropertiesVerifierStore$1.class
| +- org/jboss/chap8/ex3/service/PropertiesVerifierStore.class
| +- org/jboss/chap8/ex3/service/PropertiesVerifierStoreMBean.class
| +- org/jboss/chap8/service/SecurityConfig.class
| +- org/jboss/chap8/service/SecurityConfigMBean.class
394
};
org.jboss.security.ClientLoginModule required
password-stacking="useFirstPass"
;
Rozdzia 8. Bezpieczestwo
395
396
Rozdzia 8. Bezpieczestwo
397
Powyszy wpis w praktyce oznacza wyczenie sprawdzania wszystkich uprawnie niezalenie od wykonywanego kodu; innymi sowy, powyszy zapis stwierdza, i dowolny
kod moe wykona dowoln operacj, co oczywicie nie jest zbyt rozsdne. Okrelenie sensownego zbioru uprawnie pozostaje w gestii autorw aplikacji.
Tabela 8.1 przedstawia zbir aktualnie dostpnych uprawnie java.lang.RuntimPermissions (odnoszcych si do serwera JBoss), ktrych okrelenie jest wymagane.
W ramach zakoczenia tej dyskusji poniej podana zostaa stosunkowo mao znana informacja dotyczca ustawie regu bezpieczestwa zwizanych z testowaniem. Ot istnieje moliwo stosowania flag okrelajcych, w jaki sposb meneder bdzie uywa
pliku regu bezpieczestwa oraz jaki plik zawiera informacje dotyczce uprawnie.
Przedstawione poniej wywoanie programu java wywietla wszystkie moliwe wartoci flagi testujcej:
3
Zezwalamy na wszystko
398
Na co zezwala to uprawnienie
Zagroenia
org.jboss.security.
SecurityAssociation.
getPrincipalInfo
org.jboss.security.
SecurityAssociation.
setPrincipalInfo
org.jboss.security.
SecurityAssociation.
setServer
Moliwo uaktywnienia
lub dezaktywacji wielowtkowego
przechowywania tosamoci oraz
danych uwierzytelniajcych obiektu,
ktry spowodowa uruchomienie
biecego wtku.
org.jboss.security.
SecurityAssociation.
setRunAsRole
C:\JBoss\przyklady>java -Djava.security.debug=help
all
access
combiner
jar
logincontext
policy
provider
scl
Rozdzia 8. Bezpieczestwo
399
400
Rozdzia 8. Bezpieczestwo
401
402
Pojawienie si wyjtku, jaki zostanie w tym przypadku zgoszony, jest cakowicie zgodne z oczekiwaniami; taki by cel przygotowania tego przykadu. Warto zwrci uwag, i zamieszczone powyej informacje o zgoszonych wyjtkach zostay rcznie sformatowane w celu poprawienia ich przejrzystoci w tekcie ksiki; z tego wzgldu wyniki
uzyskane przez Czytelnika podczas uruchamiania tego przykadu mog mie nieco
inn posta. Kluczowym aspektem tego przykadu jest fakt, e zgoszony wyjtek jasno pokazuje, i do komunikacji z kontenerem EJB serwera JBoss uywane s klasy
JSSE firmy Sun. Wyjtek ten informuje, i weryfikacja certyfikatu, ktry jest uywany w przykadzie jako certyfikat serwera JBoss, wykazaa, e jest zosta on podpisany
przez adn z domylnych instytucji certyfikujcych. Takiego wyniku mona si byo
spodziewa, gdy domylny magazyn kluczy instytucji certyfikujcych dostarczany
wraz z pakietem JSSE zawiera jedynie powszechnie znane instytucje, takie jak VeriSign,
Thawte oraz RSA Data Security. Aby klient EJB uzna, i samodzielnie podpisany certyfikat jest wany, naley poinstruowa klasy JSSE, by korzystay z zaufanego magazynu (ang. truststore) chap8.keystore (magazyn zaufany to magazyn kluczy zawierajcy certyfikaty klucza publicznego uytego do podpisywania innych certyfikatw).
Rozdzia 8. Bezpieczestwo
403
W tym celu naley uruchomi przykad 4., uywajc przy tym opcji -Dex=4, a nie opcji
-Dex=4b, aby przekaza pooenie odpowiedniego zaufanego magazynu przy uyciu
waciwoci systemowej javax.net.ssl.trustStore:
C:\JBoss\przyklady>ant -Dchap=chap8 -Dex=4 run-example
...
run-example4:
[copy] Copying 1 file to /tmp/jboss-4.0.1/server/default/deploy
[echo] Waiting for 5 seconds for deploy...
...
[java] Created Echo
[java] Echo.echo()#1 = To jest wywoanie nr. 1
Tym razem jedyn informacj o tym, i wykorzystywane s gniazda SSL, jest komunikat SSL handshakeCompleted. Jest to komunikat poziomu testowania rejestrowany
w dzienniku, a generuje go klasa RMISSLClientSocketFactory. Jeli jednak klient nie
zosta skonfigurowany w taki sposb, by komunikaty poziomu testowania generowane przez bibliotek log4j byy wywietlane, to nie pojawi si adna informacja o wykorzystaniu protokou SSL. Powan rnic zauwaymy jednak, jeli przyjrzymy si
czasom dziaania oraz obcieniu procesora. Protok SSL, podobnie jak SRP, wymaga
zastosowania liczb losowych mocnych pod wzgldem kryptograficznym, ktrych
zainicjowanie podczas pierwszego uycia zabiera wiele czasu. To wanie generacja
liczb losowych jest tak wyranie widoczna w uyciu procesora i czasie uruchamiania
programu.
W konsekwencji, jeli Czytelnik bdzie uruchamia opisywane przykady, choby przykad 4b, na komputerze wolniejszym od tego, na jakim byy one tworzone, to moe
wystpi wyjtek podobny do poniszego:
javax.naming.NameNotFoundException: EchoBean4 not bound
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer
...
Powyszy problem wynika z faktu, i serwer JBoss nie zakoczy wdraania przykadowego komponentu w czasie, na jaki pozwala klient. Problem ten jest spowodowany
dugim czasem inicjalizacji generatora liczb losowych uywanego przez gniazda SSL
serwera. W razie wystpienia tego problemu wystarczy ponownie uruchomi przykad
lub zwikszy czas oczekiwania podany w pliku build.xml w katalogu zawierajcego
przykady do rozdziau 8.
404
portw, ich typ oraz uywajce ich usugi, przy czym zamieszczone informacje dotycz
standardowej konfiguracji JBoss. Z kolei tabela 8.3 przedstawia analogiczne informacje dla usug podanych w konfiguracji all.
Tabela 8.2. Porty uywane w konfiguracji domylnej
Numer
Typ
Usuga
1099
TCP
org.jboss.naming.NamingService
1098
TCP
org.jboss.naming.NamingService
4444
TCP
org.jboss.invocation.jrmp.server.JRMPInvoker
4445
TCP
org.jboss.invocation.pooled.server.PooledInvoker
8009
TCP
org.jboss.web.tomcat.tc4.EnbeddedTomcatService
8080
TCP
org.jboss.web.tomcat.tc4.EnbeddedTomcatService
8083
TCP
org.jboss.web.WebService
8093
TCP
org.jboss.mq.il.uil2.UILServerILService
Typ
Usuga
1100
TCP
org.jboss.ha.jndi.HANamingService
0a
TCP
org.jboss.ha.jndi.HANamingService
1102
UDP
org.jboss.ha.jndi.HANamingService
1161
UDP
org.jboss.jmx.adaptor.snmp.agent.SnmpAgentService
1162
UDP
org.jboss.jmx.adaptor.snmp.trapd.TrapdService
3528
TCP
org.jboss.invocation.iiop.IIOPInvoker
45566b
UDP
org.jboss.ha.framework.server.ClusterPartition
a aktualnie jest to port anonimowy, lecz mona go poda przy uyciu atrybutu RmiPort.
b istniej dwa dodatkowe porty anonimowe UDP, okreli jednak mona tylko jeden z nich;
suy do tego celu atrybut rcv_port.
Rozdzia 8. Bezpieczestwo
405
Usuga jmx-console.war
Usuga jmx-console.war, ktr mona znale w gwnym katalogu wdroeniowym
serwera, generuje strony HTML dostarczajce informacji o stanie jdra serwera. A zatem usuga ta zapewnia dostp do wszelkich operacji administracyjnych, takich jak
zamykanie serwera, zatrzymywanie usug, wdraanie nowych usug i tak dalej. Usug
t naley zabezpieczy jak kad aplikacj sieciow bd te cakowicie wyczy.
Usuga web-console.war
Usuga web-console.war, ktr mona znale w katalogu deploy/management, jest
kolejn aplikacj sieciow zapewniajc dostp do jdra serwera JMX. Wykorzystuje
ona kombinacj apletw oraz stron HTML i zapewnia porwnywalne moliwoci
administracyjne co usuga jmx-console.war. Wanie z tego wzgldu naley j zabezpieczy lub usun. W archiwum web-console.war mona znale zapisane w komentarzach szablony podstawowych zabezpiecze (w pliku WEB-INF/web.xml) oraz konfiguracj dziedziny bezpieczestwa (w pliku WEB-INF/jboss-web.xml).
Usuga http-invoker.sar
Plik http-invoker.sar umieszczony w katalogu wdroeniowym zawiera usug zapewniajc dostp do komponentw EJB i usugi Naming JNDI za pomoc RMI i HTTP.
Usuga ta zawiera serwlet, ktry przetwarza wiadomoci generowane przez szeregowane obiekty org.jboss.invocation.Invocation reprezentujce wywoania, ktry powinny zosta przekazane do MBeanServer. W efekcie daje ona moliwo dostpu za
porednictwem protokou HTTP do komponentw MBean wspomagajcych dziaanie
odczonej usugi wywoujcej RMI/JRMP, gdy istnieje moliwo okrelenia postaci
odpowiedniego dania HTTP POST. Aby uchroni si przed t moliwoci dostpu,
naleaoby zabezpieczy serwlet JMXInvokerServlet, zapisujc niezbdne informacje
konfiguracyjne w pliku http-invokier.sar/invoker.war/WEB-INF/web.xml. Poniewa
domylnie jest ju zdefiniowane bezpieczne odwzorowanie dla cieki /restricted/
JMXInvokerServlet, a zatem, aby go zastosowa, wystarczy usun inne cieki oraz
skonfigurowa domen bezpieczestwa http-invokier w pliku http-invoker.sar/invoker.
war/WEB-INF.xml.
Usuga jmx-invoker-adaptor-server.sar
Plik jmx-invoker-adaptor-server.sar zawiera usug, ktra uywajc wydzielonej usugi
wywoujcej RMI/JRMP zapewnia dostp do interfejsu MBeanServer przy uyciu interfejsu zgodnego z RMI. Obecnie jedynym sposobem zabezpieczenia tej usugi mogoby by zmiana uywanych protokow na RMI i HTTP oraz zabezpieczenie usugi
http-invoker.sar w sposb opisany w poprzednim punkcie. W przyszoci usuga ta
zostanie uruchomiona jako komponent XMBean dysponujcy odpowiedzialnym za bezpieczestwo obiektem wywoujcym obsugujcym kontrol dostpu bazujc na rolach.