Database
 sql >> Datenbank >  >> RDS >> Database

Eine Einführung in die Java-Sicherheits-API

Sicherheit ist einer der wichtigsten Bestandteile der Anwendungsentwicklung. Die Java-Sprache erleichtert die Entwicklung sicherer Anwendungen, indem sie viele Optionen und Funktionen bereitstellt, die Anwendungen sicher machen. Da es sich um ein großes Thema handelt, soll dieser Artikel einige Schlüsselaspekte der Sicherheitsfunktionen und APIs berühren, die in der Java-Plattform verfügbar sind.

Übersicht

Die Java-Plattform wurde von Grund auf unter Berücksichtigung der Sicherheit entwickelt. Die typsichere Eigenschaft der Sprache und die automatische Garbage Collection besagt, dass die Java-Architektur versucht hat, Sicherheitsfunktionen direkt aus ihrem Kern zu übernehmen.

In den letzten Jahren stand die Sicherheit im Mittelpunkt. Beispielsweise arbeiten moderne Browser daran, die Plug-in-Unterstützung wie Java, Silverlight und Flash einzuschränken oder zu reduzieren, da sie missbraucht werden können, um böswilligen Code in ein harmlos aussehendes Add-on zu integrieren. Obwohl die Java-Umgebung sauber ist, lädt das Applet nicht vertrauenswürdigen Code aus dem öffentlichen Netzwerk herunter. Dies kann eine schwerwiegende Sicherheitslücke darstellen. Auch die Browserwelt hat sich in den letzten Jahren stark verändert. Die absolute Notwendigkeit für Applet ist fast obsolet geworden. Vielleicht hat dies und vor allem die zunehmenden Sicherheitsbedenken dazu geführt, dass Applet von Java 9 abgelehnt wurde.

Java-Sicherheitsframework

Java-Sicherheitsdienste wurden erweitert und umfassen eine große Menge von Anwendungsprogrammierschnittstellen (APIs), Tools, eine Reihe von Implementierungen von Sicherheitsalgorithmen, Mechanismen und Protokollen. Dies bietet eine umfassende Umgebung, um sichere Anwendungen zu entwickeln und sie entsprechend zu verwalten.

Die Spanne der Java-Sicherheits-API ist umfangreich. Die Grundlage für die Entwicklung einer sicheren Anwendung liegt in den kryptografischen und Public-Key-Infrastruktur (PKI)-Schnittstellen, mehreren interoperablen gemeinsamen algorithmischen Implementierungen und anderen Sicherheitsdiensten. Es gibt Schnittstellen zum Durchführen von Authentifizierung und Zugriffskontrolle. Dadurch können Anwendungen vor unbefugtem Zugriff auf geschützte Ressourcen schützen.

Sprachsicherheit

Zunächst einmal ist die Sprache selbst mit dem Anliegen aufgebaut, Sicherheit in ihren Kern aufzunehmen. Das einfachste Beispiel ist vielleicht die Einbeziehung der Typensicherheit. Geben Sie sicher ein bedeutet, dass Programme zur Laufzeit eingeschränkten Zugriff auf den Speicher haben. Dies wird erreicht, indem Speicher nur Java-Objekten zugeordnet wird. Objekte haben eine entsprechende Klasse, die ihr Verhalten definiert; Dadurch wird sichergestellt, dass das Programm nur gemäß dem definierten Verhalten darauf reagieren kann. Diese Idee schwingt mit der dynamischen Typprüfung mit, aber Java enthält auch eine komplexe statische Typprüfung, wann immer dies möglich ist, um den Einschränkungen seines dynamischen Gegenstücks zu unterliegen. Beispielsweise ist der Bytecode-Verifizierer ein effektiver statischer Typprüfer, der zur Kompilierzeit verwendet wird, um jede Art von Fehler aufzudecken und dem Entwickler proaktiv zu melden. Der Bytecode-Verifizierer stellt sicher, dass ein legitimer Bytecode ausgeführt wird, indem er der Java-Sprachspezifikation entspricht. Abgesehen davon prüft es auch auf Speicherverletzungen, Stack-Unter-/Überläufe, korrekte Typumwandlungen und so weiter. Darüber hinaus gibt es Modifikatoren wie private, protected und public, um eingeschränkten Zugriff geltend zu machen.

Sicherheitsanbieter

Die Dienste fungieren als Anbieter für Sicherheit. Wenn sie über Standardschnittstellen in die Java-Plattform eingesteckt werden, erleichtern sie der Anwendung den Zugriff auf Sicherheitsdienste. Der Vorteil dieses Mechanismus besteht darin, dass der Entwickler sich nicht mit den komplizierten Details auskennen muss und sich stattdessen auf die Integration der Sicherheitsfunktionen in die Anwendung konzentrieren kann. Diese Idee ist in der abstrakten Klasse namens java.security.Provider eingekapselt . Der Sicherheitsdienst wird über getInstance() abgerufen Methode, die vom Anbieter bereitgestellt wird . Es können viele Anbieter konfiguriert sein, von denen jeder einen Namen und eine Versionsnummer hat, die in jeder Laufzeitumgebung, in der es installiert ist, konfiguriert sind. Beispielsweise kann ein Programm einen bestimmten Message-Digest-Algorithmus erhalten, indem es optional einen bestimmten Anbieter mit seinem Namen wie folgt anfordert:

MessageDigest messageDigest = MessageDigest.getInstance("MD5",
   "MyProvider1");

Kryptographie

Kryptografische Java-APIs werden auf zwei Pakete verteilt:java.security und javax.crypto . Java stellt eine große Vielfalt an kryptografischen Diensten bereit, indem es eine Reihe von kryptografischen Algorithmen implementiert. Einige davon sind wie folgt:

  • java.security.MessageDigest: Diese Klasse stellt die Implementierung einer Einweg-Hash-Funktion bereit, die Daten beliebiger Größe akzeptiert und einen Hash-Wert mit fester Länge ausgibt. Der Algorithmus heißt SHA-1 oder SHA-256.
  • java.security.Signatur: Diese Klasse wird verwendet, um die Funktionalität eines digitalen Signaturalgorithmus wie DSA-, RSA- oder DSA-Algorithmen unter Verwendung des SHA-256-Message-Digest-Algorithmus bereitzustellen. Eine digitale Signatur wird insbesondere verwendet, um die Integrität und Authentizität digitaler Daten sicherzustellen.
  • java.security.SecureRandom: Diese Klasse bietet Funktionen zum Generieren einer kryptografisch starken Zufallszahl.

Public-Key-Infrastruktur (PKI)

Die PKI-Infrastruktur ermöglicht den sicheren Austausch von Daten mittels Public-Key-Kryptographie. Es umfasst Schlüssel, Zertifikate, Verschlüsselung mit öffentlichen Schlüsseln und digitale Zertifikate. Die PKI-bezogenen Klassen werden in java.security gespeichert und java.security.cert Pakete.

Authentifizierung

Authentifizierung ist der Prozess der Überprüfung der Benutzeridentität. Java ermöglicht es der Anwendung, mithilfe des Pluggable-Moduls eine Benutzerauthentifizierung durchzuführen. Es gibt eine Klasse namens LoginContext in javax.security.auth.login Paket. Diese Klasse wird mit einem Namen instanziiert und ein CallbackHandler. Der LoginContext verwendet den Namen als Index für die Konfiguration. Die Konfiguration bestimmt das spezifische LoginModul (javax.security.auth.spi.LoginModule ). Der CallbackHandler wird an das LoginModul übergeben B. in einer GUI zur Eingabe von Benutzername und Passwort aufzufordern.

Sichere Kommunikation

Die Java-Plattform implementiert SSL- und TLS-Protokolle, die Funktionen für Nachrichtenintegrität, Datenverschlüsselung und Client- und Serverauthentifizierung bereitstellen. Dies kann verwendet werden, um eine sichere Passage der Datenkommunikation zwischen Peers auf der Grundlage des HTTP- oder TCP/IP-Protokolls zu ermöglichen. Die API-Unterstützung für die Implementierung finden Sie in der javax.net.ssl Paket. Es gibt viele unterstützende Klassen; zum Beispiel das SSLSocket Klasse ist eine Erweiterung von java.net.Socket -Klasse, um einen sicheren Socket mit dem SSL/TLS-Protokoll bereitzustellen. Dies ist nichts anderes als ein normaler Stream-Socket mit einer zusätzlichen Schutzebene über dem Transport Layer Protocol (TCP).

Zugriffskontrolle

Die Zugriffssteuerungsklasse schützt den Zugriff auf vertrauliche Ressourcen wie lokale Dateien. Der java.lang.SecurityManager Klasse vermittelt allen Zugriff. Diese Klasse ermöglicht es der Anwendung, eine Sicherheitsrichtlinie zu implementieren. Daher kann ein möglicher unsicherer Vorgang beim Versuch eingeschränkt werden, sodass die Anwendung die volle Kontrolle über zulässige Vorgänge hat.

Schlussfolgerung

Dies ist eine kurze Einführung in die Sicherheitsfunktionen, Funktionen und APIs der Java-Plattform. Java bietet umfassende Unterstützung für die Implementierung von Sicherheit in einer Anwendung, bei der Entwickler sich der Komplexität, die mit der Implementierung verbunden ist, glücklicherweise nicht bewusst sind, aber dennoch von den Vorteilen profitieren. Dies ermöglicht eine schnelle und effiziente Lieferung des Produkts, ohne dass alles von Grund auf neu erstellt werden muss.

Referenzen

  • Java-API-Dokumentation
  • Java-Sicherheitsübersicht