Java a bezpečnost
Stále více komunikace se odehrává elektronicky a obzvláště při komunikaci s úřady či bankovními ústavy je otázka bezpečnosti primární. V tomto článku se seznámíte s tím, co vše v této oblasti je možné realizovat s použitím programovacího jazyka Java.
Článek se týká Javy verze 6, která byla vydána na podzim roku 2006. V této verzi přibylo mnoho vylepšení, která jsou zajímavá obzvláště v oblasti bezpečnosti.
Architektura rozhraní
Java definuje několik rozhraní, která pokrývají hlavní bezpečnostní funkcionalitu, a to kryptografii, infrastrukturu veřejných klíčů, autentizaci, bezpečnou komunikaci a kontrolu přístupu. Návrh těchto rozhraní se řídí následujícími principy:
- nezávislost na implementaci – aplikace nemusí služby implementovat sama, může používat různé poskytovatele služeb
- spolupráce mezi různými implementacemi – v rámci jedné aplikace je možno použít více poskytovatelů
- rozšiřitelnost – je možno doinstalovat vlastního poskytovatele bezpečnostních služeb
Aplikace si může vyžádat službu, kterou potřebuje, bez uvedení jejího poskytovatele (v tom případě dostane první implementaci, kterou Java najde) nebo s uvedením konkrétního poskytovatele. Při potřebě využití nějaké zatím neimplementované služby je možné tuto službu implementovat a dále použít voláním standardního rozhraní.
Kryptografie
Kryptografický rámec obsahuje rozhraní k mnoha kryptografickým funkcím:
- výpočet hashe zprávy (MD2, MD5, SHA-1, SHA-256, SHA-384, SHA-512)
- digitální podpis (SHA1withDSA, MD2withRSA, MD5withRSA, SHA1withRSA, SHA256withRSA, SHA384withRSA, SHA512withRSA, XML Signature…)
- symetrické šifry (AES, DES, ARCFOUR, Blowfish…)
- asymetrické šifry (RSA, DSA)
- kryptografie na bázi eliptických křivek
- generování klíčů (RSA, DSA, AES, DES, ARCFOUR, Blowfish, RC2…)
- dohoda na klíči (Diffie-Hellman)
- generátory pseudonáhodných čísel
- MAC kódy (autentizační kódy zpráv)
Základní funkce jsou implementovány poskytovateli od Sunu, podrobný popis naleznete v dokumentaci. Další funkce je možno použít přes rozhraní dle standardu PKCS#11. Tyto funkce mohou být implementované přímo v nějakém hardwarovém tokenu, nebo softwarovou knihovnou, například Network Security Services (NSS) od Mozilly.
Infrastruktura veřejných klíčů
Java podporuje digitální certifikáty X.509, CRL (seznam zneplatněných certifikátů) a tvorbu a validaci certifikačních cest dle PKIX. Dále obsahuje bezpečné úložiště kryptografických klíčů a certifikátů a veřejné úložiště certifikátů (obvykle nedůvěryhodných), kde je možno skladovat také seznamy CRL.
Java podporuje úložiště dle standardů PKCS#11 (standard pro hardwarové bezpečnostní tokeny) a PKCS#12 (standard pro přenos „digitální identity“ – soukromý klíč a certifikát) a také umožňuje používat LDAP úložiště. Dále obsahuje poskytovatele, který přistupuje k úložištím certifikátů operačního systému Microsoft Windows. Zajímavá je i možnost použití bezpečnostních služeb NSS od Mozilly, s nimiž lze přistupovat k úložištím certifikátů aplikací Thunderbird, Mozilla a Firefox.
Nástroje
K vytvoření a správě javového úložiště je možno použít nástroj keytool. Tento nástroj umožňuje tvorbu páru soukromého a veřejného klíče, zobrazení a import certifikátů typu X.509 uložených v souboru, vytvoření žádosti o certifikát a import odpovědi na tuto žádost od certifikační autority.
Nástroj jarsigner slouží k podpisu JAR souborů a ověření podpisů těchto souborů. Formát JAR je javový archív, do kterého (nebo eventuálně do více archivů) se balí soubory s programem aplikace a je v zájmu bezpečnosti použití aplikace, distribuovat ji pouze v podepsaných archívech. Podpis tímto nástrojem může volitelně obsahovat i časové razítko.
Autentizace
Při autentizaci probíhá ověření identity uživatele aplikace. Aplikace volá pouze standardní rozhraní, při jehož volání se dle konfigurace určí, který autentizační modul se opravdu použije. Tak je kód aplikace zcela nezávislý na implementaci autentizace uživatele.
Architektura autentizačního rámce
Java obsahuje tyto vestavěné autentizační moduly:
- Krb5LoginModule – autentizace s použitím protokolu Kerberos
- JndiLoginModule – autentizace typu jméno/heslo s použitím databáze LDAP nebo NIST
- KeyStoreLoginModule – autentizace na základě klíče
Bezpečná komunikace
Při přenosu zpráv obsahujících důvěrná data prostředím veřejné sítě je potřeba tato data zabezpečit jednak před přečtením třetí osobou a jednak před změnou, ať už záměrnou či náhodnou. K tomu slouží různé protokoly bezpečné komunikace postavené nad základními kryptografickými funkcemi.
Java poskytuje rozhraní a implementace několika protokolů týkajících se bezpečné komunikace:
- SSL/TLS
- SASL
- GSS-API a Kerberos
Kontrola přístupu
Java obsahuje kontrolu přístupu k citlivým zdrojům (například lokální soubory) a k citlivému kódu aplikace (například vybrané metody třídy). Tuto kontrolu zajišťuje bezpečnostní manažer, který musí být nainstalovaný v javovém běhovém prostředí. Aplikace spouštěné s použitím Web Start a aplety mají bezpečnostního manažera nainstalovaného automaticky.
Po nahrání javového kódu zavaděčem třídy (class loader) jsou ke kódu automaticky připojeny informace o místě, odkud byl kód nahrán, kdo kód podepsal a jaká jsou výchozí oprávnění. Oprávnění se týkají například přístupu k síti nebo lokálním souborům. Administrátor může další oprávnění určit s použitím bezpečnostní politiky.
Mohlo by vás také zajímat
-
Monitory OLED: klíčové pojmy a funkce
13. května 2024 -
Proč investovat do nejvýkonnějších VPS s AMD EPYC procesory
14. června 2024 -
Rychlost serveru: Klíč k lepšímu umístění ve vyhledávačích
7. června 2024 -
Jak se chránit před podvody na internetu – část 1
8. října 2024
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024