Upload
denton
View
72
Download
4
Embed Size (px)
DESCRIPTION
Bezpe čnosť informačných systémov. Bezpečnosť Java a J2EE aplikácii. Obsah. Bezpečnosť Java 2 aplikácii Sandbox Security Manager Policy file Bezpe čnosť J2EE aplikácii Úvod Autentifikácia Autorizácia Security pattern. Bezpečnosť Java 2 aplikácie. Sandbox SecurityManager Policy File - PowerPoint PPT Presentation
Citation preview
BezpeBezpečnosť informačných čnosť informačných systémovsystémov
Bezpečnosť Java a J2EE aplikáciiBezpečnosť Java a J2EE aplikácii
ObsahObsah
Bezpečnosť Java 2 aplikáciiBezpečnosť Java 2 aplikácii– SandboxSandbox– Security ManagerSecurity Manager– Policy filePolicy file
BezpeBezpečnosť J2EE aplikáciičnosť J2EE aplikácii– ÚvodÚvod– AutentifikáciaAutentifikácia– AutorizáciaAutorizácia– Security patternSecurity pattern
Bezpečnosť Java 2 Bezpečnosť Java 2 aplikácieaplikácie
SandboxSandbox
SecurityManagerSecurityManager
Policy FilePolicy File
PríkladPríklad
SandboxSandbox
Bezpečnostný model prístupu aplikácii k Bezpečnostný model prístupu aplikácii k zdrojomzdrojom
Základnou myšlienkou je poskytnúť Základnou myšlienkou je poskytnúť aplikácii priestor, aby mohla bežať a aplikácii priestor, aby mohla bežať a zároveň tento priestor obmedziť zároveň tento priestor obmedziť nejakými hranicaminejakými hranicami
Java sandbox je zodpovedný za ochranu Java sandbox je zodpovedný za ochranu mnoho zdrojov a to na rôznych mnoho zdrojov a to na rôznych úrovniach.úrovniach.
Rôzne úrovne Rôzne úrovne obmedzeniaobmedzenia minimálny sandboxminimálny sandbox - obsahuje len zdroje potrebné na - obsahuje len zdroje potrebné na
beh programu. Dovoľuje prístup k beh programu. Dovoľuje prístup k CPUCPU, , obrazovkeobrazovke, , klávesniciklávesnici, , myške myške a jeho pridelenej a jeho pridelenej pamäti.pamäti.
Sandbox, ktorý okrem predchádzajúceho obsahuje aj Sandbox, ktorý okrem predchádzajúceho obsahuje aj prístup k web servru, z ktorého bol stiahnutý – prístup k web servru, z ktorého bol stiahnutý – štandardný typ.štandardný typ.
Sandbox, ktorý okrem predchádzajúceho obsahuje Sandbox, ktorý okrem predchádzajúceho obsahuje možnosť prístupu k množine programovo špecifických možnosť prístupu k množine programovo špecifických zdrojov (lokálne súbory, lokálny počítač atď)zdrojov (lokálne súbory, lokálny počítač atď)
Otvorený sandboxOtvorený sandbox, v ktorom programy majú prístup , v ktorom programy majú prístup k ľubovoľným zdrojom.k ľubovoľným zdrojom.
Vývoj modelu sandbox Vývoj modelu sandbox – JDK 1.0– JDK 1.0
pôvodný modelpôvodný model
ponúkal veľmi obmedzené ponúkal veľmi obmedzené prostredie pre vykonávanie prostredie pre vykonávanie nedôveryhodného kódu (nedôveryhodného kódu (untrusted untrusted code)code) získaného z otvorenej siete získaného z otvorenej siete
Kontrolu prístupu vykonáva Kontrolu prístupu vykonáva security managersecurity manager
Vývoj modelu sandbox Vývoj modelu sandbox – JDK 1.1– JDK 1.1
JDK 1.1 poskytlo novú JDK 1.1 poskytlo novú koncepciu podpisovania koncepciu podpisovania apletovapletov
Ak bol aplet digitálne Ak bol aplet digitálne podpísaný a ak verejný kľúč podpísaný a ak verejný kľúč určený na overenie podpisu bol určený na overenie podpisu bol rozpoznaný ako pravdivý, s rozpoznaný ako pravdivý, s apletom sa pracovalo ako apletom sa pracovalo ako s dôveryhodným (trusted) s dôveryhodným (trusted) lokálnym kódom a bol mu lokálnym kódom a bol mu poskytnutý plný prístup poskytnutý plný prístup k systémovým zdrojom.k systémovým zdrojom.
Podpísané aplety sa doručovali Podpísané aplety sa doručovali spolu s podpisom v označenom spolu s podpisom v označenom JAR súbore.JAR súbore.
Vývoj modelu sandbox Vývoj modelu sandbox – JDK 1.2– JDK 1.2
Aj lokAj lokálny a aj vzdialený kód sa álny a aj vzdialený kód sa stáva predmetom bezpečnostných stáva predmetom bezpečnostných zásad, ktoré definujú množinu právzásad, ktoré definujú množinu práv
Oprávnenia sú pridelené Oprávnenia sú pridelené zdrojom kóduzdrojom kódu
Konfigurácia sa vykonáva v súboreKonfigurácia sa vykonáva v súbore bezpečnostných pravidiel (security bezpečnostných pravidiel (security policy) policy)
Runtime systém organizuje kód do Runtime systém organizuje kód do individuálnych individuálnych doméndomén
Každá doména sa zaoberá Každá doména sa zaoberá množinou tried, ktoré majú tie množinou tried, ktoré majú tie isté právaisté práva
Security ManagerSecurity Manager
Môžeme si predstaviť štyri úrovne útoku na prostredie Môžeme si predstaviť štyri úrovne útoku na prostredie JavaJava
– Modifikácie systémuModifikácie systému, ak program má práva na čítanie , ak program má práva na čítanie a zápis a spraví nejaké zmeny v systémea zápis a spraví nejaké zmeny v systéme
– Porušenie súkromiaPorušenie súkromia, ak program má právo čítať a kradne , ak program má právo čítať a kradne súkromné údaje zo systémusúkromné údaje zo systému
– Odopretie služby,Odopretie služby, ak program používa systémové ak program používa systémové prostriedky bez požiadania v takom rozsahu, že systém prostriedky bez požiadania v takom rozsahu, že systém nedokáže vykonávať svoju činnosť (čas procesora a pod. – nedokáže vykonávať svoju činnosť (čas procesora a pod. – cycle stealingcycle stealing))
– Falošná prezentáciaFalošná prezentácia, ak sa program tvári ako skutočný , ak sa program tvári ako skutočný užívateľ systému, môže posielať maily vo vašom mene užívateľ systému, môže posielať maily vo vašom mene a pod.a pod.
Security manager dokáže zabrániť Security manager dokáže zabrániť prvým dvomprvým dvom z týchto útokov.z týchto útokov.
Security ManagerSecurity Manager Security managerSecurity manager je hlavným prvkom pri riadení prístupu aplikácii k systémovým je hlavným prvkom pri riadení prístupu aplikácii k systémovým
zdrojom. zdrojom.
Je súčasťou bežiaceho JVM a riadi prístup k vonkajším zdrojom. Je súčasťou bežiaceho JVM a riadi prístup k vonkajším zdrojom.
Definuje vonkajšie hranice sandboxu a pretože je nastaviteľný, definuje aj rôznu Definuje vonkajšie hranice sandboxu a pretože je nastaviteľný, definuje aj rôznu bezpečnostnú politiku pre aplikáciu.bezpečnostnú politiku pre aplikáciu.
Java API podporuje rôznu bezpečnostnú politiku tým, že požiada security manager Java API podporuje rôznu bezpečnostnú politiku tým, že požiada security manager o povolenie ešte pred tým, než sa vykoná nejaká akcia. Toto požiadanie vykonávajú o povolenie ešte pred tým, než sa vykoná nejaká akcia. Toto požiadanie vykonávajú check- metódycheck- metódy, napr. checkWrite()., napr. checkWrite().
Pred Java verziou 1.2 bol Pred Java verziou 1.2 bol java.lang.SecurityMangerjava.lang.SecurityManger abstraktnou triedouabstraktnou triedou a musel a musel byť implementovaný. To bola veľmi náročná práca a obsahovala mnoho citlivých byť implementovaný. To bola veľmi náročná práca a obsahovala mnoho citlivých miest, ktoré mohli viesť k vzniku dier miest, ktoré mohli viesť k vzniku dier
Verzia 1.2 predstavila konkrétnu implementáciu triedy a dovolila definovať vlastnú Verzia 1.2 predstavila konkrétnu implementáciu triedy a dovolila definovať vlastnú bezpečnostnú politiku v bezpečnostnú politiku v ASCI súbore, nie v kóde programuASCI súbore, nie v kóde programu. .
Namiesto check-metód uviedla jednu metódu Namiesto check-metód uviedla jednu metódu checkPermission().checkPermission().
Security ManagerSecurity Manager
Vo všeobecnosti aplikácia nemá pridelený security manager. To Vo všeobecnosti aplikácia nemá pridelený security manager. To znamená, že JVM nevytvorí automaticky security manager pre každú znamená, že JVM nevytvorí automaticky security manager pre každú Java aplikáciu a teda aplikácia môže vykonávať ľubovoľné operácie bez Java aplikáciu a teda aplikácia môže vykonávať ľubovoľné operácie bez nejakých bezpečnostných obmedzení.nejakých bezpečnostných obmedzení.
V aplikácii môžeme získať aktuálny security manager použitím triedy V aplikácii môžeme získať aktuálny security manager použitím triedy System:System:
SecurityManager appsm = System.getSecurityManager();
if (security != null) { security.checkExit(status);}
Security ManagerSecurity Manager
Security ManagerSecurity Manager
Policy filePolicy file
Policy file je ASCI textový súbor, ktorý môže byť vytvorený Policy file je ASCI textový súbor, ktorý môže byť vytvorený textovým editorom alebo pomocou grafického nástroja Policy textovým editorom alebo pomocou grafického nástroja Policy ToolTool
Obsahuje bezpečnostné pravidlá pre security managerObsahuje bezpečnostné pravidlá pre security manager
Je to vlastne zoznam povolený pre jednotlivé kódyJe to vlastne zoznam povolený pre jednotlivé kódy
Policy Tool sa nachádza v adresári JRE/bin/policytool.exePolicy Tool sa nachádza v adresári JRE/bin/policytool.exe
Štandardný súbor sa nachádza v JRE/lib/security/java.policyŠtandardný súbor sa nachádza v JRE/lib/security/java.policy
Štandardný súbor Štandardný súbor java.policyjava.policy
/* AUTOMATICALLY GENERATED ON Wed Apr 07 09:13:40 CEST 2004*//* DO NOT EDIT */
grant codeBase "file:${java.home}/lib/ext/*" { permission java.security.AllPermission;};
grant { permission java.lang.RuntimePermission "stopThread"; permission java.net.SocketPermission "localhost:1024-", "listen"; permission java.util.PropertyPermission "java.version", "read"; permission java.util.PropertyPermission "java.vendor", "read"; permission java.util.PropertyPermission "java.vendor.url", "read"; permission java.util.PropertyPermission "java.class.version", "read"; permission java.util.PropertyPermission "os.name", "read"; permission java.util.PropertyPermission "os.version", "read"; permission java.util.PropertyPermission "os.arch", "read"; permission java.util.PropertyPermission "file.separator", "read"; permission java.util.PropertyPermission "path.separator", "read"; permission java.util.PropertyPermission "line.separator", "read"; permission java.util.PropertyPermission "java.specification.version", "read"; permission java.util.PropertyPermission "java.specification.vendor", "read"; permission java.util.PropertyPermission "java.specification.name", "read"; permission java.util.PropertyPermission "java.vm.specification.version", "read"; permission java.util.PropertyPermission "java.vm.specification.vendor", "read"; permission java.util.PropertyPermission "java.vm.specification.name", "read"; permission java.util.PropertyPermission "java.vm.version", "read"; permission java.util.PropertyPermission "java.vm.vendor", "read"; permission java.util.PropertyPermission "java.vm.name", "read";};
Všetky existujúce Všetky existujúce povoleniapovolenia
java.security.AllPermissionjava.security.AllPermission java.secuity.BasicPermissionjava.secuity.BasicPermission
– javax.sound.sampled.AudioPermissionjavax.sound.sampled.AudioPermission– javax.security.auth.AuthPermissionjavax.security.auth.AuthPermission– java.awt.AWTPermission java.awt.AWTPermission – javax.security.auth.kerberos.DelegationPermissionjavax.security.auth.kerberos.DelegationPermission– java.util.logging.LoggingPermissionjava.util.logging.LoggingPermission– java.net.NetPermissionjava.net.NetPermission– java.util.PropertyPermissionjava.util.PropertyPermission– java.lang.reflect.ReflectPermissionjava.lang.reflect.ReflectPermission– java.lang.RuntimePermissionjava.lang.RuntimePermission– java.security.SecurityPermissionjava.security.SecurityPermission– java.io.SerializablePermissionjava.io.SerializablePermission– java.sql.SQLPermissionjava.sql.SQLPermission– javax.net.ssl.SSLPermissionjavax.net.ssl.SSLPermission
java.io.FilePermission javax.security.auth.kerberos.ServicePermissionjava.io.FilePermission javax.security.auth.kerberos.ServicePermission java.security.UnresolvedPermissionjava.security.UnresolvedPermission javax.security.auth.PrivateCredentialPermissionjavax.security.auth.PrivateCredentialPermission java.net.SocketPermissionjava.net.SocketPermission
Skúmanie obmedzení Skúmanie obmedzení apletuapletu Prehliadače pred spustením apletu inštalujú security manager, teda Prehliadače pred spustením apletu inštalujú security manager, teda
aplety bežia pod kontrolou tohto manažéra. Apletu nie je umožnené aplety bežia pod kontrolou tohto manažéra. Apletu nie je umožnené pristopovať k zdrojom, pokiaľ nemá explicitne definované oprávnenie.pristopovať k zdrojom, pokiaľ nemá explicitne definované oprávnenie.
Majme Majme ApletAplet, ktorý, ktorý sa sna sa snaží vykonať tieto akcie:ží vykonať tieto akcie:– Získať user.home Získať user.home – Vytvoriť, resp. otvoriť súbor „writetest“ a zapísať doň niečoVytvoriť, resp. otvoriť súbor „writetest“ a zapísať doň niečo– Otvoriť dialógové okno pre tlačOtvoriť dialógové okno pre tlač
Aplet nájdete na stránke Aplet nájdete na stránke www.intrak.skwww.intrak.sk//~bolibruch/BIS/priklad1~bolibruch/BIS/priklad1
Skúmanie obmedzení Skúmanie obmedzení apletuapletu
Pridanie prPridanie práv apletuáv apletu získanie user.home - aby sme mohli získať túto Property, je nutné získanie user.home - aby sme mohli získať túto Property, je nutné
pridať PropertyPermission pre náš apletpridať PropertyPermission pre náš aplet postup:postup:
– spustíme JRE/bin/policytool.exespustíme JRE/bin/policytool.exe– otvoríme java.policy súbor, ktorý sa nachádza otvoríme java.policy súbor, ktorý sa nachádza
v JRE/lib/securityv JRE/lib/security– klikneme na AddPolicyEntryklikneme na AddPolicyEntry
CodeBase – reprezentuje URL, pre ktorú sú určené dané CodeBase – reprezentuje URL, pre ktorú sú určené dané povoleniapovolenia
codeBase = codeBase = http://w3.intrak.tuke.sk/~bolibruch/BIS/priklad1/http://w3.intrak.tuke.sk/~bolibruch/BIS/priklad1/ Ak chceme, aby povolenia boli aj pre podadresáre, zadáme Ak chceme, aby povolenia boli aj pre podadresáre, zadáme
http://w3.intrak.tuke.sk/~bolibruch/BIS/-http://w3.intrak.tuke.sk/~bolibruch/BIS/- stlačte AddPermissionstlačte AddPermission
– vyberte PropertyPermissionvyberte PropertyPermission– do políčka target name napíšeme „user.home“ ako názov do políčka target name napíšeme „user.home“ ako názov
PropertyProperty– z políčka Actions vyberieme readz políčka Actions vyberieme read
Uložíme súbor a apletu sme umožnili získať user.homeUložíme súbor a apletu sme umožnili získať user.home
Pridanie prPridanie práv apletuáv apletu
Pridanie prPridanie práv apletuáv apletu
pre zápis do súboru nastavíme pre zápis do súboru nastavíme FilePermission pre súbor FilePermission pre súbor writetest a pridelíme právo writewritetest a pridelíme právo write
pre tlačenie – pre tlačenie – RuntimePermission, RuntimePermission, queuePrintJobqueuePrintJob
Pridanie prPridanie práv apletuáv apletu
Pridanie práv podpisom Pridanie práv podpisom kódukódu Ukážeme si použitie týchto bezpečnostných Ukážeme si použitie týchto bezpečnostných
nástrojov:nástrojov:
keytoolkeytool jarsignerjarsigner PolicytoolPolicytool
a samozrejme nástroj na vytvorenie jar a samozrejme nástroj na vytvorenie jar súboru, aby sme mohli podpísať tento jar súboru, aby sme mohli podpísať tento jar súbor.súbor.
Postup pre odosielateľa Postup pre odosielateľa kódukódu
Postup pre odosielateľa Postup pre odosielateľa kódukódu
Odosielateľ kódu musí vykonať tieto kroky:Odosielateľ kódu musí vykonať tieto kroky: Vytvorenie aplikácie. Vytvorenie JAR súboru pomocou nástroja
jartool. Generovanie kľúčov (ak neexistujú) pomocou
keytool –genkey príkazu. Voliteľný krok: Generovanie CSR (Certificate
signing request) pre certifikát verejného kľúča a importovať odpoveď certifikačnej autority.
Podpísanie JAR súboru pomocou jarsigner a privátneho kľúča.
Exportovanie certifikátu verejného kľúča pomocou keytool – export príkazu
Vytvorenie aplikácieVytvorenie aplikácie
import java.io.*;
public class Count { public static void countChars(InputStream in) throws IOException { int count = 0;
while (in.read() != -1) count++;
System.out.println("Counted " + count + " chars."); }
public static void main(String[] args) throws Exception { if (args.length >= 1) countChars(new FileInputStream(args[0])); else System.err.println("Usage: Count filename"); } }
Vytvorenie JAR súboruVytvorenie JAR súboru
JAR súbor, ktorý bude obsahovať Count.class súbor vytvoríme takto:
jar cvf Count.jar Count.class
Generovanie kľúčovGenerovanie kľúčov
Ak ešte nemáme vhodný privátny kľúč na Ak ešte nemáme vhodný privátny kľúč na podpísanie kódu, musíme ho vygenerovať podpísanie kódu, musíme ho vygenerovať spolu s odpovedajúcim verejným kľúčom, spolu s odpovedajúcim verejným kľúčom, ktorý sa použije na overenie podpisu.ktorý sa použije na overenie podpisu.
Vytvoríme súbor pre uloženie kľúčov Vytvoríme súbor pre uloženie kľúčov s názvom BIS.s názvom BIS.
keytool -genkey -alias signFiles -keypass kpi135 -keytool -genkey -alias signFiles -keypass kpi135 -
keystore BIS -storepass ab987ckeystore BIS -storepass ab987c
Generovanie kľúčovGenerovanie kľúčov
PrPríkaz na generovanie kľúča je -genkeyíkaz na generovanie kľúča je -genkey Časť –alias signFiles indikuje alias, ktorý sa Časť –alias signFiles indikuje alias, ktorý sa
použije na odkázanie sa na miesto použije na odkázanie sa na miesto obsahujúce kľúčeobsahujúce kľúče
Časť –keypass kpi135 špecifikuje heslo pre Časť –keypass kpi135 špecifikuje heslo pre generovaný privátny kľúč. Je vždy potrebné generovaný privátny kľúč. Je vždy potrebné pre prístup ku kľúčupre prístup ku kľúču
Časť –keystore BIS indikuje miesto, kde sa Časť –keystore BIS indikuje miesto, kde sa majú uložiť kľúčemajú uložiť kľúče
Časť –storepass ab987c určuje heslo miesta Časť –storepass ab987c určuje heslo miesta uloženia kľúčovuloženia kľúčov
Generovanie kľúčovGenerovanie kľúčov
Podpísanie JAR súboruPodpísanie JAR súboru
Teraz môžeme podpísať JAR súbor. Na podpísanie JAR Teraz môžeme podpísať JAR súbor. Na podpísanie JAR súboru Count.jar použijeme privátny kľúč, ku ktorému súboru Count.jar použijeme privátny kľúč, ku ktorému pristúpime pomocou aliasu signFile. pristúpime pomocou aliasu signFile. Výsledkom bude Výsledkom bude podpísaný JAR súbor sCount.jar.podpísaný JAR súbor sCount.jar.
jarsigner -keystore susanstore -signedjar jarsigner -keystore susanstore -signedjar sCount.jar Count.jar signFilessCount.jar Count.jar signFiles
Musíme zadať aj heslo uloženia (ab987c) a heslo Musíme zadať aj heslo uloženia (ab987c) a heslo privátneho kľúča (kpi135).privátneho kľúča (kpi135).
Nástroj jarsigner získa certifikát z miesta, ktorého Nástroj jarsigner získa certifikát z miesta, ktorého alias je alias je signFilessignFiles a priloží ho ku generovanému a priloží ho ku generovanému podpisu podpísaného JAR súboru.podpisu podpísaného JAR súboru.
Export certifikátu verejného Export certifikátu verejného kľúčakľúča
Runtime systém príjemcu kódu musí autentifikovať Runtime systém príjemcu kódu musí autentifikovať podpis pri snahe aplikácie podpísanom JAR súbore podpis pri snahe aplikácie podpísanom JAR súbore o čítanie súboru.o čítanie súboru.
Aby sme autentifikovali podpis, potrebujeme mať Aby sme autentifikovali podpis, potrebujeme mať verejný kľúč, ktorý tvorí pár s privátnym kľúčom verejný kľúč, ktorý tvorí pár s privátnym kľúčom použitým na generovanie podpisu. Príjemcovi pošleme použitým na generovanie podpisu. Príjemcovi pošleme kópiu certifikátu, ktorý autentifikuje verejný kľúč. kópiu certifikátu, ktorý autentifikuje verejný kľúč. Certifikát z miesta uloženia (BIS) skopírujeme do súboru Certifikát z miesta uloženia (BIS) skopírujeme do súboru BIS.cer takto:BIS.cer takto:
keytool -export -keystore BIS -alias signFiles -file keytool -export -keystore BIS -alias signFiles -file BIS.cerBIS.cer
Vyžiada si to heslo pre prístup k miestu uloženia Vyžiada si to heslo pre prístup k miestu uloženia
(ab987c).(ab987c).
Kroky príjemcu kóduKroky príjemcu kódu
Kroky príjemcuKroky príjemcu
Teraz je úloha na príjemcovi, ktorý prijal Teraz je úloha na príjemcovi, ktorý prijal podpísaný JAR súbor a certifikát. My podpísaný JAR súbor a certifikát. My vykonáme tieto kroky:vykonáme tieto kroky:
Vyskúšanie obmedzeníVyskúšanie obmedzení Importovať certifikát ako dôveryhodný, Importovať certifikát ako dôveryhodný,
pomocou nástroja keytool -importpomocou nástroja keytool -import Nastaviť súbor s bezpečnostnou Nastaviť súbor s bezpečnostnou
politikou, aby mali podpísané triedy politikou, aby mali podpísané triedy právo čítať daný súborprávo čítať daný súbor
Overiť výsledok zmeny bezpečnostiOveriť výsledok zmeny bezpečnosti
Vyskúšanie obmedzení Vyskúšanie obmedzení aplikácieaplikácie
Aplikáciu spustíme spolu so manažérom bezpečnosti.Aplikáciu spustíme spolu so manažérom bezpečnosti.
java -cp sCount.jar Count data.txtjava -cp sCount.jar Count data.txt
Tento príkaz vráti takúto výnimkuTento príkaz vráti takúto výnimku
Exception in thread "main" Exception in thread "main" java.security.AccessControlException:access denied java.security.AccessControlException:access denied (java.io.FilePermission C:\TestData\data read) at (java.io.FilePermission C:\TestData\data read) at java.security.AccessControlContext.checkPermission(Compiled java.security.AccessControlContext.checkPermission(Compiled Code) at Code) at java.security.AccessController.checkPermission(Compiled java.security.AccessController.checkPermission(Compiled Code) at Code) at java.lang.SecurityManager.checkPermission(Compiled Code) Code) at java.lang.SecurityManager.checkRead(Compiled Code) at at java.lang.SecurityManager.checkRead(Compiled Code) at java.io.FileInputStream.(Compiled Code) at java.io.FileInputStream.(Compiled Code) at Count.main(Compiled Code) Count.main(Compiled Code)
Importovanie Importovanie certifikátucertifikátu Predtým, než povolíte podpísanému kódu čítať Predtým, než povolíte podpísanému kódu čítať
špecifikovaný súbor, potrebujeme importovať špecifikovaný súbor, potrebujeme importovať certifikát BIS ako dôveryhodný certifikát do priestoru certifikát BIS ako dôveryhodný certifikát do priestoru kľúčov.kľúčov.
Choďte do adresára, ktorý obsahuje certifikát BIS.cer Choďte do adresára, ktorý obsahuje certifikát BIS.cer a vykonjte takýto príkaz:a vykonjte takýto príkaz:
keytool -import -alias susan -file SusanJones.cer –keytool -import -alias susan -file SusanJones.cer –keystore raystorekeystore raystore
Ak si chceme overiť platnosť tohto certifikátu, zadajte:Ak si chceme overiť platnosť tohto certifikátu, zadajte:
keytool -printcert -file SusanJones.cerkeytool -printcert -file SusanJones.cer
Nastavenie súboru Nastavenie súboru s bezpečnosťou s bezpečnosťou
Po otvorení súboru s bezpečnosťou pomocou Po otvorení súboru s bezpečnosťou pomocou nástroja policytool musíme špecifikovať tzv. nástroja policytool musíme špecifikovať tzv. keystore, miesto, kde sa nachádza kľúč. Aby keystore, miesto, kde sa nachádza kľúč. Aby sme ho definovali, vyberme príkaz Change sme ho definovali, vyberme príkaz Change Keystore z menu Edit.Keystore z menu Edit.
Miesto raystore v adresári c:/Test určíme Miesto raystore v adresári c:/Test určíme pomocou URL taktopomocou URL takto
file:/C:/Test/raystorefile:/C:/Test/raystoreTeraz pridáme práva pre takto podpísaný kód Teraz pridáme práva pre takto podpísaný kód
už známym spôsobom s tým, že do kolonky už známym spôsobom s tým, že do kolonky SignedBy uvedieme susan (alias pre SignedBy uvedieme susan (alias pre importovaný certifíkát).importovaný certifíkát).
BezpeBezpečnosť J2EE čnosť J2EE aplikáciiaplikácii J2EE architektúraJ2EE architektúra Úvod do bezpečnostiÚvod do bezpečnosti AutentifikáciaAutentifikácia AutorizáciaAutorizácia J2EE Security patternJ2EE Security pattern
Čo je to J2EE ?Čo je to J2EE ? Java 2 Enterprise Edition (J2EE) je viacvrstvová Java 2 Enterprise Edition (J2EE) je viacvrstvová
architektúra pre implementovanie enterprise architektúra pre implementovanie enterprise aplikácii a web aplikáciiaplikácii a web aplikácii
J2EE je platforma pre vývoj distribuovaných J2EE je platforma pre vývoj distribuovaných enterprise aplikáciienterprise aplikácii
Hlavným cieľom J2EE technológie je vytvoriť Hlavným cieľom J2EE technológie je vytvoriť jednoduchý vývojový model pre enterprise jednoduchý vývojový model pre enterprise aplikácie pomocou aplikačného modelu aplikácie pomocou aplikačného modelu založeného na komponentach. Tieto komponenty založeného na komponentach. Tieto komponenty využívajú služby poskytované kontajneromvyužívajú služby poskytované kontajnerom
Komponenty J2EEKomponenty J2EE
Aplikačné komponentyAplikačné komponenty ApletAplet Java Servlet a JavaServer PagesJava Servlet a JavaServer Pages Enterprise JavaBeansEnterprise JavaBeans
Štandardné služby Štandardné služby J2EEJ2EE Java Database Connectivity (JDBC)Java Database Connectivity (JDBC) Java Transaction API (JTA)Java Transaction API (JTA) Java Transaction Service (JTS)Java Transaction Service (JTS) Java Messaging Service (JMS)Java Messaging Service (JMS) Java Naming and Directory Interface (JNDI)Java Naming and Directory Interface (JNDI) Java Activation Framework (JAF)Java Activation Framework (JAF) Remote Method Invocation (RMI)Remote Method Invocation (RMI) JavaMail API (JMA)JavaMail API (JMA) Java Interface Definition Language (JavaIDL)Java Interface Definition Language (JavaIDL)
N-vrstvová J2EE N-vrstvová J2EE architektúraarchitektúra
Architektúra J2EEArchitektúra J2EE
Vrstvy J2EE Vrstvy J2EE architektúryarchitektúry
Klientská vrstvaKlientská vrstva (Client tier)- HTML klient, (Client tier)- HTML klient, aplet, Java aplikáciaaplet, Java aplikácia
Web vrstvaWeb vrstva (Web tier) – Java servlets, Java (Web tier) – Java servlets, Java Server Page (umiestnenie - web kontajner)Server Page (umiestnenie - web kontajner)
Obchodná vrstva Obchodná vrstva (business tier) – Java (business tier) – Java Entity BeansEntity Beans
Niekedy sa tu pridáva tzv. Niekedy sa tu pridáva tzv. Integračná vrstvaIntegračná vrstva (Integration tier)(Integration tier)
EIS vrstvaEIS vrstva (Enterprise Information System (Enterprise Information System (EIS) tier) – databázy, zdroje...(EIS) tier) – databázy, zdroje...
Úvod do bezpečnosti Úvod do bezpečnosti
J2EE aplikácie a Web services aplikácie sú J2EE aplikácie a Web services aplikácie sú vytvárané z komponentov, ktoré môžu byť vytvárané z komponentov, ktoré môžu byť umiestnené v rôznych kontajneroch. Tieto umiestnené v rôznych kontajneroch. Tieto komponenty sú používané na budovanie komponenty sú používané na budovanie viacvrstvovej obchodnej aplikácie. Bezpečnosť viacvrstvovej obchodnej aplikácie. Bezpečnosť komponentov zabezpečuje kontajner, ktorý ponúka komponentov zabezpečuje kontajner, ktorý ponúka dva druhy bezpečnosti :dva druhy bezpečnosti : DeklataračnáDeklataračná – vyjadruje bezpečnostnú štruktúru aplikácii, – vyjadruje bezpečnostnú štruktúru aplikácii,
obsahuje bezpečnostné role, kontrola prístupu, požiadavky obsahuje bezpečnostné role, kontrola prístupu, požiadavky autentifikácia – vo forme externej vzhľadom na aplikáciu autentifikácia – vo forme externej vzhľadom na aplikáciu (definuje sa v deployment descriptor-e komponentu.)(definuje sa v deployment descriptor-e komponentu.)
ProgramováProgramová – je vložená do aplikácie a používa sa na – je vložená do aplikácie a používa sa na rozhodovanie o bezpečnosti. Je vhodná, ak deklaračná rozhodovanie o bezpečnosti. Je vhodná, ak deklaračná bezpečnosť nie je dostačujúca na vyjadrenie bezpečnostného bezpečnosť nie je dostačujúca na vyjadrenie bezpečnostného modelu aplikácie.modelu aplikácie.
Úvod do bezpečnostiÚvod do bezpečnosti
J2EE aplikácia sa skladá z komponentov, ktoré obsahujú chránené a J2EE aplikácia sa skladá z komponentov, ktoré obsahujú chránené a nechránené zdroje. Často je potrebné chrániť zdroje a zabezpečiť, aby k nim nechránené zdroje. Často je potrebné chrániť zdroje a zabezpečiť, aby k nim mali prístup iba autorizovaný používatelia. mali prístup iba autorizovaný používatelia. Kontrola prístupu zahrňuje dva Kontrola prístupu zahrňuje dva kroky:kroky:
– AutentifikáciaAutentifikácia – musí preukázať svoju identitu pomocou autentifikácie. – musí preukázať svoju identitu pomocou autentifikácie. Obvykle sa to vykonáva poskytnutím autentifikačných údajov (ako napr. meno a Obvykle sa to vykonáva poskytnutím autentifikačných údajov (ako napr. meno a heslo). Entita, ktokrá môže byť autentifikovaná, sa nazýva heslo). Entita, ktokrá môže byť autentifikovaná, sa nazýva principal. principal. Principal Principal môže byť používateľ ale aj program. Používatelia sa zvyčajne autentifikujú môže byť používateľ ale aj program. Používatelia sa zvyčajne autentifikujú pomocou prihlásenia.pomocou prihlásenia.
– Autorizácia - Autorizácia - Ak sa autentifikovaný principal snaží pristúpiť k zdrojom, system Ak sa autentifikovaný principal snaží pristúpiť k zdrojom, system rozhodne, či tento principal je autorizovaný tak spraviť.rozhodne, či tento principal je autorizovaný tak spraviť.
AutorizáciaAutorizácia poskytuje kontrolu prístupu k chráneným zdrojom. poskytuje kontrolu prístupu k chráneným zdrojom. Je založená Je založená na identifikácii a autentifikácii. na identifikácii a autentifikácii. IdentifikáciaIdentifikácia je process, ktorý umožní je process, ktorý umožní rozpoznanie každej entity systému a rozpoznanie každej entity systému a autentifikácia autentifikácia je process, ktorí overí je process, ktorí overí identitu užívateľa, zariadenia alebo inej entity systému.identitu užívateľa, zariadenia alebo inej entity systému.
Authorizácia a autentifikácia sa nevyžadujú k prístupu k nechráneným Authorizácia a autentifikácia sa nevyžadujú k prístupu k nechráneným zdrojom. zdrojom. Prístup k zdrojom bez autentifikácie sa označuje ako anonymný Prístup k zdrojom bez autentifikácie sa označuje ako anonymný (anonymous access, unauthenticated access).(anonymous access, unauthenticated access).
Oblasti, používatelia, skupiny a roleOblasti, používatelia, skupiny a role
Autentifikačná služba J2EE servra zahŕňa a spolupracuje s týmito Autentifikačná služba J2EE servra zahŕňa a spolupracuje s týmito komponentami:komponentami:
Oblasť (Realm):Oblasť (Realm): Súbor užívateľov a skupín, ktoré sú kontrolované tým Súbor užívateľov a skupín, ktoré sú kontrolované tým istým autentifikačným spôsobomistým autentifikačným spôsobom
Používateľ (User):Používateľ (User): Individuálna identita (alebo aplikačný program), ktorá Individuálna identita (alebo aplikačný program), ktorá bola definovaná v Sun Java System Application Server Platform Edition bola definovaná v Sun Java System Application Server Platform Edition 8.0. Môže byť pridelený do skupiny.8.0. Môže byť pridelený do skupiny.
Skupina (Group):Skupina (Group): Množina autentifikovaných používateľov, ktorých Množina autentifikovaných používateľov, ktorých spájajú spoločné znakyspájajú spoločné znaky
Rola (Role):Rola (Role): Abstraktné meno pre povolenie prístupu k jednotlivým Abstraktné meno pre povolenie prístupu k jednotlivým množinám zdrojov v aplikácii. Rola môže byť prirovnaná ku kľúču, ktorým množinám zdrojov v aplikácii. Rola môže byť prirovnaná ku kľúču, ktorým sa otvorí zámok. Mnoho ľudí môže mať kópiu tohto kľúča a zámok sa sa otvorí zámok. Mnoho ľudí môže mať kópiu tohto kľúča a zámok sa nestará o to, kto ste, iba o to, či máte správny kľúčnestará o to, kto ste, iba o to, či máte správny kľúč
Oblasti, používatelia, skupiny Oblasti, používatelia, skupiny a rolea role
Login autentifikáciaLogin autentifikácia
J2EE platforma dovoľuje tvorcovi aplikačných J2EE platforma dovoľuje tvorcovi aplikačných komponentov vybrať si spôsob autentifikácie. Ak sa komponentov vybrať si spôsob autentifikácie. Ak sa snažíme pristúpiť ku chráneným Web zdrojom, Web snažíme pristúpiť ku chráneným Web zdrojom, Web kontajner aktivuje autentifikačný mechanizmus. Môžeme kontajner aktivuje autentifikačný mechanizmus. Môžeme špecifikovať tieto autentifikačné mechanizmy:špecifikovať tieto autentifikačné mechanizmy:
HTTP základná autentifikáciaHTTP základná autentifikácia Login autentifikácia založená na formuláriLogin autentifikácia založená na formulári Autentifikácia certifikátom klientaAutentifikácia certifikátom klienta Obojstranná (vzájomná) autentifikácia Obojstranná (vzájomná) autentifikácia Zjednodušená autentifikácia (digest authentification)Zjednodušená autentifikácia (digest authentification)
Použitie HTTP základnej Použitie HTTP základnej autentifikácieautentifikácie
Vykonajú sa tieto kroky:• Klient požiada o prístup k chráneným zdrojom.• Web server vráti dialógové okno, ktoré žiada meno a heslo používateľa.• Klient zadá a odošle meno a heslo servru.• Server overí platnosť došlých údajov a ak sú správne, vráti zdroj.
Použitie HTTP základnej Použitie HTTP základnej autentifikácieautentifikácie
Avšak http autentifikácia nie je celkom Avšak http autentifikácia nie je celkom bezpečná, pretože posiela tieto údaje cez bezpečná, pretože posiela tieto údaje cez internet ako text, ktorý je internet ako text, ktorý je kódovaný kodom kódovaný kodom uu (Unix-to-Unix), resp. base64uu (Unix-to-Unix), resp. base64, ale , ale nie nie je šifrovanýje šifrovaný. .
Tento mechanizmus by sme nakonfigurovali Tento mechanizmus by sme nakonfigurovali v súbore deployment descriptor Web v súbore deployment descriptor Web komponentu takto:komponentu takto:<web-app><web-app>
<login-config><login-config><auth-method>BASIC|DIGEST</auth-method><auth-method>BASIC|DIGEST</auth-method>
<realm-name>jpets</realm-<realm-name>jpets</realm-name>name>
</login-config></login-config></web-app> </web-app>
Použitie autentifikácie založenej na Použitie autentifikácie založenej na formuláriformulári
Vykonajú sa tieto kroky:
• Klient požiada o prístup k chráneným zdrojom.• Ak nie je autentifikovaný, server presmeruje klienta ja stránku pre prihlásenie• Klient vyplní a odošle pirhlasovací formulár na server.• Ak je prihlásenie úspešné, klient bude presmerovaný na požadovaný zdroj, inak na chybovú stránku
Použitie autentifikácie založenej na Použitie autentifikácie založenej na formuláriformulári
Ani táto autentifikácia nie je celkom Ani táto autentifikácia nie je celkom bezpečná, ak sa informácie posielajú ako text bezpečná, ak sa informácie posielajú ako text a kým sa nepoužije SSL.a kým sa nepoužije SSL.
Konfigurácia:Konfigurácia:
<web-app><web-app><login-config><login-config>
<auth-method>FORM</auth-method><auth-method>FORM</auth-method><form-login-config><form-login-config>
<form-login-page>login.jsp</form-login-<form-login-page>login.jsp</form-login-page>page> <form-error-page>error.jsp</<form-error-page>error.jsp</form-error-page>form-error-page> </form-login-config></form-login-config>
</login-config></login-config>
</web-app></web-app>
Použitie autentifikácie certifikátom Použitie autentifikácie certifikátom klientaklienta
Táto forma autentifikácie predstavuje Táto forma autentifikácie predstavuje bezpečnejšiu metódu, než dve bezpečnejšiu metódu, než dve predchádzajúce. Server a klient sa predchádzajúce. Server a klient sa autentifikujú pomocou verejných kľúčov autentifikujú pomocou verejných kľúčov certifikátu. Secure Socket Layer (SSL) certifikátu. Secure Socket Layer (SSL) poskytuje šifrovanie dát, autentifikáciu poskytuje šifrovanie dát, autentifikáciu servra, integritu správ voliteľnú servra, integritu správ voliteľnú autentifikáciu klienta pre TCP/IP spojenieautentifikáciu klienta pre TCP/IP spojenie
Použitie obojstrannej autentifikáciePoužitie obojstrannej autentifikácie
Pri vzájomnej autentifikácii sa Pri vzájomnej autentifikácii sa autentifikujú navzájom server a autentifikujú navzájom server a aj klient. Sú dva typy tejto aj klient. Sú dva typy tejto autentifikácie:autentifikácie:
Založená na certifikátochZaložená na certifikátoch
Založená na mene a hesleZaložená na mene a hesle
Autentifikácia založená na Autentifikácia založená na certifikátochcertifikátoch
Autentifikácia založená na Autentifikácia založená na certifikátochcertifikátoch
Vyskytnú sa tieto kroky:Vyskytnú sa tieto kroky: Klient požiadá o prístup k chráneným Klient požiadá o prístup k chráneným
zdrojom.zdrojom. Web server doručí svoj certifikát Web server doručí svoj certifikát
klientoviklientovi Klient overí certifikát zo servraKlient overí certifikát zo servra Ak je správny, klient posiela certifikát Ak je správny, klient posiela certifikát
na serverna server Server kontroluje údaje klientaServer kontroluje údaje klienta Ak sú správne, server poskytne prístup Ak sú správne, server poskytne prístup
ku chráneným zdrojomku chráneným zdrojom
Autentifikácia založená na Autentifikácia založená na mene a heslemene a hesle
Autentifikácia založená na Autentifikácia založená na mene a heslemene a hesle
Kroky:Kroky: Klient požiada o prístup k chráneným zdrojom.Klient požiada o prístup k chráneným zdrojom. Web server doručí svoj certifikát klientovi.Web server doručí svoj certifikát klientovi. Klient overí došlý certifikát.Klient overí došlý certifikát. Ak je správny, odošle na server meno a heslo, Ak je správny, odošle na server meno a heslo,
ktorý overí ich platnosťktorý overí ich platnosť Ak overenie úspešne prebehlo, server zaručí Ak overenie úspešne prebehlo, server zaručí
prístup ku chráneným zdrojom.prístup ku chráneným zdrojom.
<web-app><web-app><login-config><login-config><auth-method>CLIENT-CERT</auth-method><auth-method>CLIENT-CERT</auth-method></login-config></login-config>
</web-app> </web-app>
AutorizáciaAutorizácia
Autorizácia J2EE platformy je založená na koncepte Autorizácia J2EE platformy je založená na koncepte bezpečnostných rol. Bezpečnostná rola (bezpečnostných rol. Bezpečnostná rola (security security role) role) je logická skupina používateľov. Každá je logická skupina používateľov. Každá bezpečnostná rola je mapovaná na principal bezpečnostná rola je mapovaná na principal v prostredí umiestnenia. Bezpečnostná rola môže v prostredí umiestnenia. Bezpečnostná rola môže byť použitá s deklarovanou bezpečnosťou alebo byť použitá s deklarovanou bezpečnosťou alebo programovanou bezpečnosťou.programovanou bezpečnosťou.
Tento mechanizmus môže kontrolovať prístup na Tento mechanizmus môže kontrolovať prístup na základe URL alebo na základe podpisu volajúceho základe URL alebo na základe podpisu volajúceho kódu.kódu.
Volaný komponent má k dispozícii tzv. credential, Volaný komponent má k dispozícii tzv. credential, ktorý obsahuje informácie popisujúce volajúceho. ktorý obsahuje informácie popisujúce volajúceho. Tieto atribúty identifikujú volajúceho v danom Tieto atribúty identifikujú volajúceho v danom kontexte jedinečne a nazývajú sa bezpečnostné kontexte jedinečne a nazývajú sa bezpečnostné atribúty. atribúty.
Deklaračná autorizáciaDeklaračná autorizácia
Pri kontrole prístupu založenej na kontajneri je táto Pri kontrole prístupu založenej na kontajneri je táto kontrola zabezpečená pomocou nástrojov na kontrola zabezpečená pomocou nástrojov na umiestnenie, ktoré mapujú aplikačný model povolení umiestnenie, ktoré mapujú aplikačný model povolení do bezpečnostných pravidiel, ktoré sa umiestnia do do bezpečnostných pravidiel, ktoré sa umiestnia do súboru deployment descriptor. súboru deployment descriptor.
Tento súbor definuje logické práva, Tento súbor definuje logické práva, security rolessecurity roles, , a asociuje ich a asociuje ich s s komponentamikomponentami
Deklarácia rolíDeklarácia rolí<security-role><security-role>
<description>Your description<description>Your description < </description/description>>
<role-name><role-name>Payroll-Chief<Payroll-Chief</role-name/role-name>>
</security-role></security-role>
Deklarácia metódDeklarácia metód
Pri deklaračná bezpečnosti môžeme Pri deklaračná bezpečnosti môžeme definovať kontrolu prístupu k EJB metódam definovať kontrolu prístupu k EJB metódam špecifikovaním elementu method-permission špecifikovaním elementu method-permission v jeho deployment descriptore. v jeho deployment descriptore.
Element method-permission obsahuje Element method-permission obsahuje zoznam metód, ktoré môže volať daná zoznam metód, ktoré môže volať daná bezpečnostná rola. bezpečnostná rola.
Ak principal v danej bezpečnostnej role má Ak principal v danej bezpečnostnej role má umožnený prístup k metóde, potom môže umožnený prístup k metóde, potom môže vykonať túto metódu.vykonať túto metódu.
Deklarácia metódDeklarácia metód
<<method-permissionmethod-permission>><<role-namerole-name>admin</role-name>>admin</role-name>
<<methodmethod>><<ejb-nameejb-name>TheOrder</ejb-name>>TheOrder</ejb-name>
<<method-namemethod-name>*</method->*</method-name>name> </</methodmethod>>
</</method-permissionmethod-permission>><method-permission><method-permission>
<role-name>customer</role-name><role-name>customer</role-name><method><method>
<<ejb-name>TheOrder</ejb-name> ejb-name>TheOrder</ejb-name>
<method-name>getDetails</method-name> <method-name>getDetails</method-name> </method></method> <method><method>......
</method-permission</method-permission
Programovaná Programovaná bezpečnosťbezpečnosť
Pri programovanej bezpečnosti sa kontrola prístupu riadi Pri programovanej bezpečnosti sa kontrola prístupu riadi pomocou metód EJBContext.isCallerInRole alebo pomocou metód EJBContext.isCallerInRole alebo HttpServletRequest.isRemoteUserInRole.HttpServletRequest.isRemoteUserInRole.
Použitie metódy getCallerPrincipal()Použitie metódy getCallerPrincipal() Použitie metódy Použitie metódy getCallerPrincipal()getCallerPrincipal()umožňuje hlavne umožňuje hlavne
beanu verifikovať principalbeanu verifikovať principalPrincipal p = ctx.Principal p = ctx.getCallerPrincipalgetCallerPrincipal();();iif (p.getName().equalsIgnoreCase("payroll-admin"))f (p.getName().equalsIgnoreCase("payroll-admin"))// return the row for "payroll-admin"// return the row for "payroll-admin"else // unrecognized nameelse // unrecognized namethrow new MyApplicationException(p.getName() + " throw new MyApplicationException(p.getName() + "
invalid");invalid"); Bean vie získať indentitu volajúce pomocou Bean vie získať indentitu volajúce pomocou
EJBContext. „Payroll-Admin“ je principal.EJBContext. „Payroll-Admin“ je principal.
Použitie metódy isCallerInRole()Použitie metódy isCallerInRole()
Táto metóda umožňuje rozpoznanie role Táto metóda umožňuje rozpoznanie role bez toho, aby bean sa pokúsil bez toho, aby bean sa pokúsil identifikovať principal.identifikovať principal.if (ctx.isCallerInRole("payroll-admin"))if (ctx.isCallerInRole("payroll-admin"))
// then allow editing of payroll info// then allow editing of payroll info else // you're not an administratorelse // you're not an administrator // allow viewing of data only// allow viewing of data only
Bean môže teda overiť, či je caller Bean môže teda overiť, či je caller členom nejakej role. „Payroll-Admin“ je členom nejakej role. „Payroll-Admin“ je deklarovaný ako referencia.deklarovaný ako referencia.
Java PatternsJava Patterns
PatternPattern je pravidlo, ktoré vyjadruje vzťah je pravidlo, ktoré vyjadruje vzťah medzi istým kontextom, problémom medzi istým kontextom, problémom a riešením. Jednoducho povedané, a riešením. Jednoducho povedané, patterny umožňujú nájdenie známeho patterny umožňujú nájdenie známeho opakujúceho sa problému a jeho riešenia.opakujúceho sa problému a jeho riešenia.
Security PatternsSecurity Patterns poskytujú overené poskytujú overené techniky pre riešené známych problémov techniky pre riešené známych problémov pri programovaní. pri programovaní.
Tieto šablóny pracujú spoločne Tieto šablóny pracujú spoločne a vytvárajú množinu najlepších praktík, a vytvárajú množinu najlepších praktík, ktorých hlavným cieľom je podporiť ktorých hlavným cieľom je podporiť bezpečnostnú politiku organizácie.bezpečnostnú politiku organizácie.
Výhody použitia Výhody použitia patternovpatternov Môžu byť použité a implementované Môžu byť použité a implementované
kedykoľvek na zlepšenie návrhu systémukedykoľvek na zlepšenie návrhu systému Málo skúsený programátor môže čerpať zo Málo skúsený programátor môže čerpať zo
skúsenosti omnoho skusenejších skúsenosti omnoho skusenejších programátorov a návrhárovprogramátorov a návrhárov
Použitie overených riešeníPoužitie overených riešení Poskytujú všeobecný jazyk pre návrh, Poskytujú všeobecný jazyk pre návrh,
testovanie a vývoj testovanie a vývoj Môžu byť ľahko kategorizované, vyhľadané Môžu byť ľahko kategorizované, vyhľadané
a použitéa použité Poskytujú znovupoužiteľné, opakovateľné Poskytujú znovupoužiteľné, opakovateľné
a zdokumentované bezpečnostné praktikya zdokumentované bezpečnostné praktiky
KatalKatalóg šablónóg šablón
Security patternSecurity pattern
Existuje niekoľko bezpečnostných Existuje niekoľko bezpečnostných vzorov pre tvorbu J2EE aplikácie:vzorov pre tvorbu J2EE aplikácie:
Single Access Point PatternSingle Access Point Pattern Check Point PatternCheck Point Pattern Role PatternRole Pattern
Single Access Point Single Access Point PatternPattern
Táto šablóna popisuje system iba s jedným bodom Táto šablóna popisuje system iba s jedným bodom vstupu, vstupom, ktorý je spoločný pre všetky vstupu, vstupom, ktorý je spoločný pre všetky prichádzajúce žiadosti a je jedinou bránou prístupu do prichádzajúce žiadosti a je jedinou bránou prístupu do systému. Každý používateľ musí prejsť základnou systému. Každý používateľ musí prejsť základnou autentifikáciou. Ak by prišla neutorizovaná žiadosť autentifikáciou. Ak by prišla neutorizovaná žiadosť o chránený zdroj, táto žiadosť môže byť automaticky o chránený zdroj, táto žiadosť môže byť automaticky presmerovaná na prístupový bod kvôli overeniu.presmerovaná na prístupový bod kvôli overeniu.
Je zvyčajne reprezentovaná jednou žiadosťou o login Je zvyčajne reprezentovaná jednou žiadosťou o login do siete organizácie alebo na individuálny server. do siete organizácie alebo na individuálny server. Iným príkladom môže byť aplikácia poskytujúca jednu Iným príkladom môže byť aplikácia poskytujúca jednu login stránku namiesto rôznych pre každú službu.login stránku namiesto rôznych pre každú službu.
Implementácia je jednoduchá – deklaračne sa vo web Implementácia je jednoduchá – deklaračne sa vo web vrstve špecifikuje, ktoré web zdroje ( URL, http vrstve špecifikuje, ktoré web zdroje ( URL, http metódy...) majú chrániť. Ak sa anonymný používateľ metódy...) majú chrániť. Ak sa anonymný používateľ snaží pristúpiť k týmto zdrojom, web kontajner si snaží pristúpiť k týmto zdrojom, web kontajner si vyžiada autentifikáciu.vyžiada autentifikáciu.
Check Point PatternCheck Point Pattern
Táto šablóna centralizuje a vynucuje Táto šablóna centralizuje a vynucuje autentifikáciu a autorizáciu. Úlohou tohto autentifikáciu a autorizáciu. Úlohou tohto mechanizmu je rozhodnúť, či má používateľ mechanizmu je rozhodnúť, či má používateľ dostatočné privilégia na prístup k zdrojom. Tým, dostatočné privilégia na prístup k zdrojom. Tým, že sa centralizuje táto logika, sa zabezpečí že sa centralizuje táto logika, sa zabezpečí jednoduchšia správa akplikačných práv jednoduchšia správa akplikačných práv a obchodných pravidiel. Môže byť použitá napr a obchodných pravidiel. Môže byť použitá napr pri systéme s viacerými bezpečnostnými pri systéme s viacerými bezpečnostnými úrovniami – Check Point garantuje prístup ku úrovniami – Check Point garantuje prístup ku všetkým zdrojom na danej úrovni.všetkým zdrojom na danej úrovni.
Väčšina tejto šablóny môže byť riešená pomocou Väčšina tejto šablóny môže byť riešená pomocou Java Authentication and Authorization Service Java Authentication and Authorization Service (JAAS).(JAAS).
Role PatternRole Pattern
Táto šablóna popisuje priradenie k jednej alebo Táto šablóna popisuje priradenie k jednej alebo viacerým rolám, kde každá rola má nejaké viacerým rolám, kde každá rola má nejaké pravidlá (nie používateľ). Tento prístup má dve pravidlá (nie používateľ). Tento prístup má dve výhody:výhody:
ak sa zmení rola alebo priradenia používateľa ak sa zmení rola alebo priradenia používateľa k roliam, nie je potrebná zmena základných k roliam, nie je potrebná zmena základných objektov pre kontrolu prístupuobjektov pre kontrolu prístupu
povolenia sa riadia a prideľujú intuitívne, pretože povolenia sa riadia a prideľujú intuitívne, pretože rola reprezentuje časť organizačnej štruktúryrola reprezentuje časť organizačnej štruktúry
Implementácia v J2EE platforme je pomocou Implementácia v J2EE platforme je pomocou deklaračného bezpečnostného modelu deklaračného bezpečnostného modelu definovaním rolí v súboroch ejb-jar.xml definovaním rolí v súboroch ejb-jar.xml a web.xml. a web.xml.
Zoznam literatúryZoznam literatúry
java.sun.com/security/java.sun.com/security/ Enterprise JavaBeans Programing, Sun Enterprise JavaBeans Programing, Sun
Microsystems, 2000Microsystems, 2000 Stephanie Bodoff, Dale Green, Eric Jendrock, Stephanie Bodoff, Dale Green, Eric Jendrock,
Monica Pawlan, Beth Stearns: The J2EE Monica Pawlan, Beth Stearns: The J2EE TutorialTutorial
Deepak Alur, John Crupi, Dan Malks Deepak Alur, John Crupi, Dan Malks : Core : Core J2EE Patterns – Best Practices and Design J2EE Patterns – Best Practices and Design StrategiesStrategies
Craig A. Berry, John Carnell, Matjaz B. Juric, Craig A. Berry, John Carnell, Matjaz B. Juric, Nadia Nashi: J2EE Design Patterns Applied, Nadia Nashi: J2EE Design Patterns Applied, Wrox PressWrox Press