Database
 sql >> Baza danych >  >> RDS >> Database

Wprowadzenie do Java Security API

Bezpieczeństwo to jedna z najważniejszych części tworzenia aplikacji. Język Java ułatwia tworzenie bezpiecznych aplikacji, udostępniając wiele opcji i funkcji zapewniających bezpieczeństwo aplikacji. Ponieważ jest to duży temat, ten artykuł dotyczy kilku kluczowych aspektów funkcji bezpieczeństwa i interfejsów API dostępnych na platformie Java.

Przegląd

Platforma Java jest budowana od podstaw z myślą o bezpieczeństwie. Właściwość type safe języka i automatyczne usuwanie elementów bezużytecznych stwierdza, że ​​architektura Java próbowała przejąć funkcje bezpieczeństwa od samego początku.

W ostatnich latach główny nacisk położono na bezpieczeństwo. Na przykład nowoczesne przeglądarki pracują nad ograniczeniem lub zmniejszeniem obsługi wtyczek, takich jak Java, Silverlight i Flash, ponieważ mogą one zostać wykorzystane do włączenia złośliwego kodu w nieszkodliwie wyglądającym dodatku. Chociaż środowisko Java jest czyste, natura apletu polega na tym, że pobiera on niezaufany kod z sieci publicznej. Może to być poważnym naruszeniem bezpieczeństwa. Również świat przeglądarek zmienił się znacząco w ciągu ostatnich kilku lat. Absolutna potrzeba Aplet stała się prawie przestarzała. Być może to, a przede wszystkim rosnące obawy o bezpieczeństwo, sprawiły, że aplet został wycofany z Javy 9.

Struktura bezpieczeństwa Java

Usługi Java Security rozszerzyły się i obejmują duży zestaw interfejsów programowania aplikacji (API), narzędzi, szereg implementacji algorytmów bezpieczeństwa, mechanizmów i protokołów. Zapewnia to kompleksowe środowisko do tworzenia bezpiecznych aplikacji i odpowiedniego zarządzania nimi.

Zakres API bezpieczeństwa Java jest szeroki. Podstawą tworzenia bezpiecznej aplikacji są interfejsy infrastruktury kryptograficznej i klucza publicznego (PKI), wiele interoperacyjnych wspólnych implementacji algorytmicznych i inne usługi bezpieczeństwa. Istnieją interfejsy do przeprowadzania uwierzytelniania i kontroli dostępu. Umożliwia to aplikacjom ochronę przed nieautoryzowanym dostępem do chronionych zasobów.

Bezpieczeństwo języka

Po pierwsze, sam język jest zbudowany z troską o wchłonięcie bezpieczeństwa w jego rdzeń. Najprostszym przykładem jest być może włączenie bezpieczeństwa typu. Wpisz bezpieczny oznacza, że ​​programy mają ograniczony dostęp do pamięci w czasie wykonywania. Osiąga się to poprzez kojarzenie pamięci tylko z obiektami Java. Obiekty mają odpowiednią klasę, która definiuje ich zachowanie; zapewnia to, że program może działać na nim tylko zgodnie ze zdefiniowanym zachowaniem. Pomysł ten rezonuje z dynamicznym sprawdzaniem typów, ale Java zawiera również złożone statyczne sprawdzanie typów, gdy tylko jest to możliwe, aby uniknąć ograniczeń swojego dynamicznego odpowiednika. Na przykład weryfikator kodu bajtowego jest skutecznym kontrolerem typu statycznego używanym w czasie kompilacji do wykrywania wszelkiego rodzaju błędów i proaktywnego raportowania do programisty. Weryfikator kodu bajtowego zapewnia wykonanie prawidłowego kodu bajtowego zgodnie ze specyfikacją języka Java. Oprócz tego sprawdza również naruszenie pamięci, przepełnienie/przepełnienie stosu, prawidłowe typy rzutów i tak dalej. Oprócz tego istnieją modyfikatory, takie jak prywatny, chroniony i publiczny, które zapewniają ograniczony dostęp.

Dostawcy zabezpieczeń

Usługi pełnią rolę dostawcy bezpieczeństwa. Podłączone do platformy Java za pomocą standardowych interfejsów ułatwiają aplikacji uzyskanie usług bezpieczeństwa. Zaletą tego mechanizmu jest to, że programista nie musi znać skomplikowanych szczegółów i zamiast tego może skupić się na zintegrowaniu funkcji bezpieczeństwa z aplikacją. Ta idea jest zawarta w abstrakcyjnej klasie o nazwie java.security.Provider . Usługa bezpieczeństwa jest uzyskiwana przez getInstance() metoda dostarczona przez Dostawcę . Może być skonfigurowanych wielu dostawców, z których każdy ma nazwę i numer wersji skonfigurowane w każdym środowisku wykonawczym, w którym jest zainstalowany. Na przykład program może uzyskać określony algorytm skrótu wiadomości, opcjonalnie żądając określonego dostawcy przez jego nazwę w następujący sposób:

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

Kryptografia

Kryptograficzne API Java są dystrybuowane w dwóch pakietach:java.security i javax.crypto . Java zapewnia szeroką gamę usług kryptograficznych, implementując szereg algorytmów kryptograficznych. Oto kilka z nich:

  • java.security.MessageDigest: Ta klasa zapewnia implementację jednokierunkowej funkcji skrótu, która pobiera dane o dowolnym rozmiarze i generuje wartość skrótu o stałej długości. Algorytm nazywa się SHA-1 lub SHA-256.
  • java.security.Podpis: Ta klasa służy do zapewniania funkcjonalności algorytmu podpisu cyfrowego, takiego jak algorytmy DSA, RSA lub DSA, przy użyciu algorytmu skrótu wiadomości SHA-256. Podpis cyfrowy jest szczególnie używany w celu zapewnienia integralności i autentyczności danych cyfrowych.
  • java.security.SecureRandom: Ta klasa zapewnia funkcjonalność generowania kryptograficznie silnej liczby losowej.

Infrastruktura klucza publicznego (PKI)

Infrastruktura PKI umożliwia bezpieczną wymianę danych z wykorzystaniem kryptografii klucza publicznego. Obejmuje klucze, certyfikaty, szyfrowanie kluczem publicznym i certyfikaty cyfrowe. Klasy związane z PKI są przechowywane w java.security i java.security.cert pakiety.

Uwierzytelnianie

Uwierzytelnianie to proces weryfikacji tożsamości użytkownika. Java umożliwia aplikacji przeprowadzanie uwierzytelnienia użytkownika za pomocą modułu wtykowego. Istnieje klasa o nazwie LoginContext w javax.security.auth.login pakiet. Ta klasa ma instancję z nazwą i CallbackHandler. Kontekst logowania używa nazwy jako indeksu do konfiguracji. Konfiguracja określa konkretny LoginModule (javax.security.auth.spi.LoginModule ). Obsługa połączeń zwrotnych jest przekazywany do LoginModule aby zapytać o nazwę użytkownika i hasło, na przykład w GUI.

Bezpieczna komunikacja

Platforma Java implementuje protokoły SSL i TLS, które zapewniają funkcjonalność integralności wiadomości, szyfrowania danych oraz uwierzytelniania klienta i serwera. Można to wykorzystać do zapewnienia bezpiecznego przesyłania danych między komputerami równorzędnymi w oparciu o protokół HTTP lub TCP/IP. Wsparcie API dla implementacji można znaleźć w javax.net.ssl pakiet. Istnieje wiele klas wspierających; na przykład SSLSocket klasa jest rozszerzeniem java.net.Socket klasa zapewniająca bezpieczne gniazdo przy użyciu protokołu SSL/TLS. To nic innego jak zwykłe gniazdo strumieniowe z dodatkową warstwą ochronną w stosunku do protokołu warstwy transportowej (TCP).

Kontrola dostępu

Klasa kontroli dostępu chroni dostęp do wrażliwych zasobów, takich jak pliki lokalne. java.lang.SecurityManager klasa pośredniczy we wszystkich dostępach. Ta klasa umożliwia aplikacji zaimplementowanie zasad bezpieczeństwa. W związku z tym ewentualna niebezpieczna operacja może zostać ograniczona podczas próby, dzięki czemu aplikacja ma pełną kontrolę nad dozwolonymi operacjami.

Wniosek

Jest to krótki przewodnik po funkcjach, funkcjach i interfejsach API platformy Java. Java zapewnia kompleksowe wsparcie we wdrażaniu zabezpieczeń w aplikacji, w której programiści mogą być w błogiej nieświadomości złożoności związanej z ich wdrażaniem, a jednocześnie czerpać z tego korzyści. Pozwala to na szybką i wydajną dostawę produktu bez konieczności budowania wszystkiego od zera.

Referencje

  • Dokumentacja Java API
  • Omówienie zabezpieczeń Java

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL COUNT() dla początkujących

  2. „Czy to jest tajemnica? Czy to bezpieczne?” Postępowanie z danymi wrażliwymi w modelowaniu danych

  3. Jak utworzyć widok w SQL

  4. Obciążenie przyrostowe w SSIS

  5. Jak uzyskać zapisy z ostatnich 30 dni?