02_02_01_JakartaSecurity: Einleitung - BjoernWitt/JavaTutorial GitHub Wiki
Jakarta Security Einleitung
Security ist heutzutage ein essenzielles Thema in der Anwendungsentwicklung. Dies ist so, weil insbesondere Web-Anwendungen im offenen Internet zugänglich sind oder Firmen ihre Daten und Zugänge vor schadhaften Fremdzugriffen schützen müssen. Über die Jahre haben sich hierbei Prinzipien und Standards etabliert, die in diesem Tutorial eingangs betrachtet werden, um das ganzheitliche Verständnis zum Thema zu fördern.
Prinzip: Multiple Sicherheitsebenen
Im wesentlichen kann ein System gegen Angriffe auf 3 Ebenen gehärtet werden:
- Physikalische Sicherheit - Schutz von Eigentum und Leute:
- Menschliche Angriffe: Raub, Vandalismus, etc.
- Naturkatastrophen: Feuer, Wasser, Sturm, Erdbeben, etc.
- Unfallverhütung: Stromschläge, allg. Unfälle und Bagatellschäden, wie bspw. Kaffee/Cola in EDV
- Menschliche Katastrophen: Kriege, Terroranschläge, etc.
- Technologische Sicherheit - Schutz durch technische Einschränkungen:
- Anwendung: Erfolgt durch selbstgeschriebenen Code und die Fremdnutzung von Komponenten
- Betriebssystem: Bietet bestehende Techniken und Methoden zum Schutz vor Gefahren und Angriffen an.
- Netzwerk: Alle Aktionen was die Vertraulichkeit, Integrität und Zugriffe auf Computernetzwerke schützt.
- Regeln und Prozeduren - Schutz der Menschen vor ungewolltes Verschulden oder wenn technisch/physikalisch keine Lösung realisierbar ist.
Dieses Tutorial befasst sich im wesentlichen mit der technologischen Sicherheit.
Prinzip: Informationssicherheit
Unter Informationssicherheit versteht man grundsätzlich die Vertraulichkeit, die Integrität und Verfügbarkeit von Informationen. Weitere Begriffe sind:
- Authentication - Ein Anwender kann dauerhaft während der Nutzung seine Identität zweifelsfrei nachweisen.
- Authorisation - Benutzer haben ausreichende Berechtigungen für eingeschränkten Zugriff oder reglementierte Ausführung von Aufgaben.
- Nonrepudiation - Ausgeführte Aktionen können zweifelsfrei Benutzern zugewiesen werden.
- Auditing - Manipulationssichere Verfolgung von sicherheitsrelevanten Ereignissen im System (Logging)
Prinzip: Verantwortungsraum in Jakarta EE
Wie zuvor erwähnt, liegt der Schwerpunkt dieses Tutorials auf der Ebene der technologischen Sicherheit. Da im Jakarta EE System die schützenswerten Assets durch Container verwaltet werden, tragen diese auch die Verantwortung hierfür. Die bekannten EE Container sind:
- Web/Servlet Container
- EJB Container
- Application Client Container (oder Client im Allgemeinen)
Prinzip: Deklarative und Programmatische Lösungen
Um die Assets einer Anwendung in den Containern technisch zu schützen, lassen sich die Vorgehensweisen prinzipiell in zwei Ansätze unterscheiden. Diese sind eine deklarative oder programmatische Lösungen.
Deklarative Lösungen sind zunächst empfohlen, da sie technisch ausgereift sind und schnellen Entwicklungsfortschritt ermöglichen. Da deklarative Lösungen allerdings funktional eingeschränkt sein können, ist es zuweilen erforderlich programmatische Lösungsansätze zu verfolgen.
Java Authentication and Authorization Service (JAAS)
Einen Grundstein für die frühe Idee von Java Security legte die Programmierschnittstelle PAM (Pluggable Authentication Modules). In PAM werden Authentisierungsmodule konfiguriert, ohne dass Softwareteile neu kompiliert werden müssen. Nachdem es in dem ersten Release der Servlet API in 1998 weder wesentliche Security (außer: HttpServletRequest.getRemoteUser()
) gab, wurde JAAS mit der Java SE (Standard Edition) 1.3.1 als Erweiterung und in Java 1.4 (Feb. 2002) als integrierter Teil der Java Platform veröffentlicht. Prinzipiell ist JAAS von der Idee her eine Java Implementierung von PAM.
Authentication bedeutet, dass der Benutzer zweifelsfrei erkannt wird. Authorization bedeutet, dass für den Benutzer Berechtigungen verwaltet und umgesetzt werden. Die JAAS API wurde mit Blick auf den Funktionsumfang von PAM, durch nachfolgende zusätzliche Features erweitert:
- Konzept von User
- Definition von Permissions in Policy-Dateien
- code location (Wo kommt der Code her - Download)
- code signers (Wer stellt Code bereit)
- Einführung des Typs
Subject
auf Basis des X.509 Public Keys - Principal Matching für frühes Rollenkonzept
Dies bedeutet, dass JAAS, obwohl es auch programmatische Lösungen ermöglichte, im Wesentlichen aber einen deklarativen Ansatz verfolgt. Die Stärken von JAAS zeigen sich in einer Intranet Lösung mit einer 3-Schichten Architektur. In dieser können problemlos die geschützten Konfigurationen, durch Administratoren auf dem Server erfolgen (Deployment Descriptor). Der Einsatz für eine offene Web-Anwendungen, in der sich beliebige Benutzer anmelden können und für die das Rechtesystem komplett von der Anwendung verwaltet werden sollte, passte zu dem bisherigen Standard kaum.