Rozdział 8. ♦ Bezpieczeństwo 399 Zastosowanie protokołu SSL przy użyciu JSSE Do obsługi protokołu SSL JBoss wykorzystuje rozszerzenie JSSE (ang. Java Secure Socket Extension). Stanowi ono jeden z elementów platformy JDK 1.4. Aby móc rozpocząć korzystanie z niego, należy uzyskać parę kluczy — prywatny i publiczny — zapisanych w postaci certyfikatu X509. Klucze te będą wykorzystywane przez gniazda SSL serwera. Na potrzeby przykładów zamieszczonych w niniejszej książce wygene-rowano certyfikat przy użyciu programu keytool (wchodzącego w skład JDK), a wyni-kowy plik umieszczono w katalogu chap8 pod nazwą chap8.keystore. Plik ten został wygenerowany przy użyciu następującego polecenia: keytool -genkey -keystore chap8.keystore -storepass rmi+ssl -keypass rmi+ssl ¦-keyalg RSA -alias chapter8 -validity 3650 -dname "cn=chapter8 example,ou=admin book,dc=jboss,dc=org" Wykonanie powyższego polecenia powoduje utworzenie pliku magazynu kluczy (ang. keystore) o nazwie chap8.keystore ( magazyn kluczy to baza danych zawierająca klucze używane przez systemy bezpieczeństwa). W magazynie kluczy umieszczane są dwa rodzaje wpisów: Klucze — każdy wpis tego typu zawiera bardzo wrażliwe, poufne informacje dotyczące kluczy kryptograficznych, które, w celu uniemożliwienia dostępu osób nieupoważnionych, są przechowywane w zabezpieczonym formacie. Zazwyczaj kluczem przechowywanym we wpisach tego typu jest klucz tajny lub klucz prywatny wraz z dołączonym do niego łańcuchem certyfikatów odpowiedniego klucza publicznego. Programy keytool oraz jarsigner są w stanie obsługiwać jedynie wpisy tego drugiego rodzaju, czyli te, w których są umieszczane klucze prywatne wraz z łańcuchem certyfikatów. Zaufane certyfikaty — każdy wpis tego typu zawiera jeden certyfikat klucza publicznego należącego do kogoś innego. Nosi on nazwę zaufanego certyfikatu, gdyż właściciel magazynu kluczy ufa, iż klucz publiczny zapisany w certyfikacie faktycznie należy do osoby będącej podmiotem (właścicielem) certyfikatu. Wystawca certyfikatu, podpisując go, ręczy, że tożsamość jego właściciela jest poprawna. Poniżej przedstawione zostały wyniki wyświetlenie zawartości pliku src/main/org/ jboss/chap8/chap8.keystore przy użyciu programu keytool: C:\JBoss\przyklady>keytool -list -v -keystore src/main/org/jboss/chap8/chap8.keystore Enter keystore password: rmi+ssl Keystore type: jks Keystore provider: SUN Your keystore contains 1 entry Alias name: chapter8 Creation date: 2004-12-17 Entry type: keyEntry 400 JBoss 4.0. Podręcznik administratora Certificate chain length: 1 Certificate[1]: Owner: CN=chapter8 example, OU=admin book, DC=jboss, DC=org Issuer: CN=chapter8 example, OU=admin book, DC=jboss, DC=org Serial number: 41c23d6c Valid from: Thu Dec 16 19:59:08 CST 2004 until: Sun Dec 14 19:59:08 CST 2014 Certificate fingerprints: MD5: 36:29:FD:1C:78:44:14:5E:5A:C7:EB:E5:E8:ED:06:86 SHA1: 37:FE:BB:8A:A5:CF:D9:3D:B9:61:8C:53:CE:19:1E:4D:BC:C9:18:F2 ******************************************* ******************************************* Kiedy rozszerzenie JSSE będzie poprawnie działać, a magazyn kluczy zawierający niezbędny certyfikat został już wygenerowany, można przystąpić do konfiguracji serwera JBoss tak, by dostęp do komponentów EJB odbywał się przy użyciu protokołu SSL. W tym celu należy odpowiednio skonfigurować fabryki gniazd RMI obiektu wywołują- cego EJB. Podsystem JBossSX zawiera implementacje interfejsów java.rmi.server. RMIServerSocketFactory oraz java.rmi.server.RMIClientSocketFactory, które pozwalają na stosowanie RMI wraz z gniazdami obsługującymi komunikacje szyfrowaną przy użyciu protokołu SSL. Interfejsy te są odpowiednio implementowane przez klasy: org.jboss.security.ssl.RMISSLServerSocketFactory oraz org.jboss.security.ssl. RMISSLClientSocketFactory. Rozpoczęcie wykorzystania protokołu SSL w celu odwo- ływania się do komponentów EJB wymaga wykonania dwóch operacji. Pierwszą z nich jest włączenie wykorzystania magazynu kluczy jako bazy danych zawierającej certyfikaty SSL serwera. Operacja ta wymaga odpowiedniego skonfigurowania komponentu MBean org.jboss.security.plugins.JaasSecurityDomain. Stosowny deskryptor umieszczony w pliku jboss-service.xml w katalogu chap8/ex4 został przedstawiony na listingu 8.16. Listing 8.16. Przykładowa konfiguracja JaasSecurityDomain w przypadku zastosowania RMI i SSL
name="jboss.security:service=JaasSecurityDomain,domain=RMI+SSL">
chap8.keystore rmi+ssl
Klasa JaasSecurityDomain dziedziczy po „standardowej” klasie JaasSecurityManager i dodaje do niej obsługę magazynów kluczy oraz możliwości dostępu do obiektów ty-pu KeyManagerFactory oraz TrustManagerFactory. Rozbudowuje ona możliwości standardowego menadżera bezpieczeństwa o obsługę protokołu SSL oraz innych operacji kryptograficznych wymagających użycia kluczy. Przedstawiona powyżej konfiguracja powoduje po prostu wczytanie magazynu kluczy chap8.keystore (z pliku SAR tworzonego w przykładzie 4.) przy wykorzystaniu wskazanego hasła. Rozdział 8. ♦ Bezpieczeństwo 401 Drugim krokiem jest zdefiniowanie konfiguracji obiektu wywołującego EJB, który będzie korzystać z obiektów fabrykujących gniazda RMI obsługujące protokół SSL. W tym celu należy zdefiniować własną konfiguracje obiektu JRMPInvoker zgodnie z informacjami zamieszczonymi w rozdziale 5., „Komponenty EJB w JBossie”, jak również przygotować konfiguracje komponentu EJB, który będzie używać tego obiektu wywołującego. Poniższy fragment pliku jboss-service.xml przedstawia deskryptor definiujący niestandardowy obiekt JRMPInvoker: name="jboss:service=invoker,type=jrmp,socketType=SSL">
|