Zabezpečení je jednou z nejdůležitějších součástí vývoje aplikací. Jazyk Java usnadňuje vývoj bezpečných aplikací tím, že poskytuje mnoho možností a funkcí, které zajišťují bezpečnost aplikací. Protože se jedná o velké téma, tento článek se dotkne několika klíčových aspektů bezpečnostních funkcí a rozhraní API dostupných na platformě Java.
Přehled
Platforma Java je od základu vytvořena s ohledem na bezpečnost. Vlastnost type safe jazyka a automatické shromažďování odpadků uvádí, že architektura Java se pokusila nasát bezpečnostní prvky přímo ze svého jádra.
V posledních letech se klade důraz na bezpečnost. Moderní prohlížeče například pracují na omezení nebo omezení podpory zásuvných modulů, jako jsou Java, Silverlight a Flash, protože mohou být zneužity k začlenění škodlivého kódu do neškodně vypadajícího doplňku. Přestože je prostředí Java čisté, povahou apletu je, že stahuje nedůvěryhodný kód z veřejné sítě. To může být závažné porušení zabezpečení. Také svět prohlížečů se za posledních několik let výrazně změnil. Absolutní potřeba Appletu se stala téměř zastaralou. Možná toto a především rostoucí obavy o bezpečnost způsobily, že Applet byl z Java 9 zastaralý.
Java Security Framework
Služby Java Security se rozšířily a zahrnují velkou sadu aplikačních programovacích rozhraní (API), nástrojů, řadu implementací bezpečnostních algoritmů, mechanismů a protokolů. To poskytuje komplexní prostředí pro vývoj bezpečných aplikací a jejich odpovídající správu.
Rozsah Java Security API je rozsáhlý. Základ vývoje bezpečné aplikace spočívá v rozhraních kryptografických a veřejných klíčů (PKI), více interoperabilních společných algoritmických implementacích a dalších bezpečnostních službách. Existují rozhraní pro provádění ověřování a řízení přístupu. To umožňuje aplikacím chránit se před neoprávněným přístupem k chráněným zdrojům.
Jazykové zabezpečení
Za prvé, jazyk samotný je postaven se zájmem o vstřebání bezpečnosti do jeho jádra. Nejjednodušším příkladem je snad začlenění typové bezpečnosti. Bezpečný typ znamená, že programy mají za běhu omezený přístup k paměti. Toho je dosaženo přidružením paměti pouze k objektům Java. Objekty mají odpovídající třídu, která definuje jejich chování; tím je zajištěno, že program na něj může působit pouze podle definovaného chování. Tato myšlenka rezonuje s dynamickou kontrolou typu, ale Java také zahrnuje komplexní kontrolu statického typu, kdykoli je to možné, aby podlehla omezením svého dynamického protějšku. Například ověřovač bajtového kódu je účinným statickým typem kontroly používaným v době kompilace k odhalení jakéhokoli typu chyby a proaktivnímu hlášení vývojáři. Verifikátor bajtového kódu zajišťuje provedení legitimního bajtového kódu v souladu se specifikací jazyka Java. Kromě toho také kontroluje narušení paměti, pod/přetečení zásobníku, správné typové obsazení a tak dále. Kromě toho existují modifikátory jako private, protected a public pro zajištění omezeného přístupu.
Poskytovatelé zabezpečení
Služby fungují jako poskytovatel bezpečnosti. Jsou-li připojeny k platformě Java prostřednictvím standardních rozhraní, usnadňují aplikaci získat bezpečnostní služby. Výhodou tohoto mechanismu je, že vývojář nemusí vědět o složitých detailech a místo toho se může soustředit na integraci bezpečnostních prvků do aplikace. Tato myšlenka je zapouzdřena v abstraktní třídě s názvem java.security.Provider . Bezpečnostní služba se získává prostřednictvím getInstance() způsob dodaný Poskytovatelem . Může být nakonfigurováno mnoho poskytovatelů, z nichž každý má v každém běhovém prostředí, ve kterém je nainstalován, nakonfigurován název a číslo verze. Program může například získat konkrétní algoritmus digestu zpráv volitelným vyžádáním konkrétního poskytovatele jeho jménem takto:
MessageDigest messageDigest = MessageDigest.getInstance("MD5", "MyProvider1");
Kryptografie
Java kryptografická API jsou distribuována do dvou balíčků:java.security a javax.crypto . Java poskytuje širokou škálu kryptografických služeb implementací řady kryptografických algoritmů. Některé z nich jsou následující:
- java.security.MessageDigest: Tato třída poskytuje implementaci jednosměrné hašovací funkce, která přebírá data libovolné velikosti a vydává hašovací hodnotu s pevnou délkou. Algoritmus se jmenuje SHA-1 nebo SHA-256.
- java.security.Signature: Tato třída se používá k poskytování funkcí algoritmu digitálního podpisu, jako jsou algoritmy DSA, RSA nebo DSA, pomocí algoritmu SHA-256 message digest. Digitální podpis se používá zejména k zajištění integrity a autenticity digitálních dat.
- java.security.SecureRandom: Tato třída poskytuje funkce pro generování kryptograficky silného náhodného čísla.
Infrastruktura veřejného klíče (PKI)
Infrastruktura PKI umožňuje bezpečnou výměnu dat pomocí kryptografie veřejného klíče. Zahrnuje klíče, certifikáty, šifrování veřejného klíče a digitální certifikáty. Třídy související s PKI jsou uloženy v java.security a java.security.cert balíčky.
Ověření
Ověření je proces ověřování identity uživatele. Java umožňuje aplikaci provádět autentizaci uživatele pomocí zásuvného modulu. Existuje třída s názvem LoginContext v javax.security.auth.login balík. Tato třída je vytvořena s jménem a CallbackHandler. LoginContext používá název jako index konfigurace. Konfigurace určuje konkrétní LoginModule (javax.security.auth.spi.LoginModule ). CallbackHandler je předán LoginModule pro výzvu k zadání uživatelského jména a hesla, například v GUI.
Bezpečná komunikace
Platforma Java implementuje protokoly SSL a TLS, které poskytují funkce pro integritu zpráv, šifrování dat a ověřování klienta a serveru. To lze použít k zajištění bezpečného průchodu datové komunikace mezi partnery nad protokolem HTTP nebo TCP/IP. Podporu API pro implementaci lze nalézt na javax.net.ssl balík. Existuje mnoho podpůrných tříd; například SSLSocket class je rozšířením java.net.Socket třídy poskytující zabezpečený soket pomocí protokolu SSL/TLS. Toto není nic jiného než normální streamový soket s přidanou vrstvou ochrany přes protokol transportní vrstvy (TCP).
Řízení přístupu
Třída řízení přístupu chrání přístup k citlivým zdrojům, jako jsou místní soubory. java.lang.SecurityManager třída zprostředkovává veškerý přístup. Tato třída umožňuje aplikaci implementovat bezpečnostní politiku. Proto může být při pokusu omezena možná nebezpečná operace, takže aplikace má plnou kontrolu nad povolenými operacemi.
Závěr
Toto je rychlý průvodce bezpečnostními funkcemi, funkcemi a rozhraními API platformy Java. Java poskytuje komplexní podporu pro implementaci zabezpečení v aplikacích, kde si vývojáři mohou blaženě neuvědomovat složitosti spojené s jejich implementací, a přesto těžit z jejích výhod. To využívá rychlé a efektivní dodání produktu, aniž byste museli vše budovat od začátku.
Odkazy
- Dokumentace Java API
- Přehled zabezpečení Java