sql >> Databasteknik >  >> RDS >> Database

En introduktion till Java Security API

Säkerhet är en av de viktigaste delarna av applikationsutveckling. Java-språket gör det enkelt att utveckla säkra applikationer genom att tillhandahålla många alternativ och funktioner som gör applikationer säkra. Eftersom det är ett stort ämne ska den här artikeln beröra några viktiga aspekter av säkerhetsfunktionerna och API:erna som finns tillgängliga i Java-plattformen.

Översikt

Java-plattformen, från grunden, är byggd med säkerhet i åtanke. Den typsäkra egenskapen för språket och automatisk sophämtning anger att Java-arkitekturen försökte insupa säkerhetsfunktioner direkt från dess kärna.

De senaste åren har säkerhet varit ett stort fokus. Till exempel arbetar moderna webbläsare med att begränsa eller minska stödet för plugin-program som Java, Silverlight och Flash eftersom de kan missbrukas för att inkorporera busig kod i ett tillägg som ser ofarligt ut. Även om Java-miljön är ren, är appletens natur att den laddar ner opålitlig kod från det offentliga nätverket. Detta kan vara ett stort säkerhetsintrång. Dessutom har webbläsarvärlden förändrats avsevärt under de senaste åren. Det absoluta behovet av Applet har blivit nästan föråldrat. Kanske detta och i första hand den ökande säkerhetsoro gjorde att Applet togs bort från Java 9.

Java Security Framework

Java Security-tjänster har utökats och inkluderar en stor uppsättning applikationsprogrammeringsgränssnitt (API), verktyg, ett antal implementeringar av säkerhetsalgoritmer, mekanismer och protokoll. Detta ger en heltäckande miljö för att utveckla säkra applikationer och hantera dem därefter.

Spännvidden för Java Security API är omfattande. Grunden för att utveckla en säker applikation ligger i gränssnitten för kryptografisk och offentlig nyckelinfrastruktur (PKI), flera interoperabla gemensamma algoritmiska implementeringar och andra säkerhetstjänster. Det finns gränssnitt för att utföra autentisering och åtkomstkontroll. Detta gör det möjligt för applikationer att skydda sig mot obehörig åtkomst till skyddade resurser.

Språksäkerhet

Till att börja med är själva språket byggt med en oro för att få in säkerhet i sin kärna. Det enklaste exemplet är kanske införandet av typsäkerhet. Skriv säkert betyder att program har begränsad åtkomst till minne under körning. Detta uppnås genom att endast associera minne till Java-objekt. Objekt har en motsvarande klass som definierar dess beteende; detta säkerställer att programmet endast kan agera på det enligt det definierade beteendet. Denna idé resonerar med dynamisk typkontroll, men Java innehåller också komplex statisk typkontroll när det är möjligt för att ge efter för begränsningen hos dess dynamiska motsvarighet. Till exempel är bytekodverifieraren en effektiv statisk typkontroll som används vid kompilering för att upptäcka alla typer av fel och proaktivt rapportera till utvecklaren. Bytecode-verifieraren säkerställer att en legitim bytekod exekveras genom att överensstämma med Java Language Specification. Bortsett från detta kontrollerar den också för minnesbrott, stack under/overflows, korrekta typcasts och så vidare. Utöver detta finns det modifierare som privat, skyddad och offentlig för att hävda begränsad åtkomst.

Säkerhetsleverantörer

Tjänsterna fungerar som en leverantör av säkerhet. De, när de är anslutna till Java-plattformen via standardgränssnitt, gör det enkelt för applikationen att få säkerhetstjänster. Fördelen med denna mekanism är att utvecklaren inte behöver känna till de intrikata detaljerna och istället kan fokusera på att integrera säkerhetsfunktionerna i applikationen. Denna idé är inkapslad i den abstrakta klassen som heter java.security.Provider . Säkerhetstjänsten erhålls genom getInstance() metod som tillhandahålls av leverantören . Det kan finnas många leverantörer konfigurerade där var och en har ett namn och ett versionsnummer konfigurerat för varje körning som det installeras i. Ett program kan till exempel få en viss meddelandesammanfattningsalgoritm genom att eventuellt begära en specifik leverantör med dess namn enligt följande:

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

Kryptografi

Javas kryptografiska API:er är fördelade på två paket:java.security och javax.crypto . Java tillhandahåller ett stort utbud av kryptografiska tjänster genom att implementera ett antal kryptografiska algoritmer. Några av dem är följande:

  • java.security.MessageDigest: Den här klassen tillhandahåller implementeringen av en enkelriktad hashfunktion som tar data av godtycklig storlek och matar ut ett hashvärde med fast längd. Algoritmen heter SHA-1 eller SHA-256.
  • java.security.Signature: Den här klassen används för att tillhandahålla funktionaliteten hos en digital signaturalgoritm som DSA-, RSA- eller DSA-algoritmer, med hjälp av SHA-256-meddelandesammandragsalgoritmen. En digital signatur används speciellt för att säkerställa integriteten och äktheten hos digitala data.
  • java.security.SecureRandom: Den här klassen tillhandahåller funktionalitet för att generera ett kryptografiskt starkt slumptal.

Public Key Infrastructure (PKI)

PKI-infrastrukturen möjliggör säkert utbyte av data med hjälp av kryptografi med publik nyckel. Den omfattar nycklar, certifikat, kryptering av offentlig nyckel och digitala certifikat. Klasserna relaterade till PKI lagras i java.security och java.security.cert paket.

Autentisering

Autentisering är processen för att verifiera användarens identitet. Java gör det möjligt för applikationen att utföra användarautentisering med hjälp av den pluggbara modulen. Det finns en klass som heter LoginContext i javax.security.auth.login paket. Den här klassen instansieras med ett namn och en CallbackHandler. LoginContext använder namnet som ett index till konfigurationen. Konfigurationen bestämmer den specifika LoginModule (javax.security.auth.spi.LoginModule ). CallbackHandler skickas till LoginModule för att fråga efter användarnamn och lösenord, till exempel i ett GUI.

Säker kommunikation

Java-plattformen implementerar SSL- och TLS-protokoll som tillhandahåller funktionalitet för meddelandeintegritet, datakryptering och klient- och serverautentisering. Detta kan användas för att skapa en säker passage av datakommunikation mellan peers ovanpå HTTP- eller TCP/IP-protokoll. API-stödet för implementeringen finns i javax.net.ssl paket. Det finns många stödklasser; till exempel SSLSocket klass är en förlängning av java.net.Socket klass för att tillhandahålla en säker socket med SSL/TLS-protokoll. Detta är inget annat än en vanlig stream-socket med ett extra skyddslager över transportlagerprotokollet (TCP).

Åtkomstkontroll

Åtkomstkontrollklassen skyddar åtkomst till känsliga resurser som lokala filer. java.lang.SecurityManager klass förmedlar all åtkomst. Denna klass tillåter applikationen att implementera en säkerhetspolicy. Därför kan en eventuell osäker operation begränsas i försöket, så applikationen har full kontroll över tillåtna operationer.

Slutsats

Detta är en snabb rundtur över Java-plattformens säkerhetsfunktioner, funktionalitet och API:er. Java tillhandahåller omfattande stöd för att implementera säkerhet i en applikation där utvecklare kan vara lyckligt omedvetna om komplexiteten i att implementera dem, men ändå skörda dess fördelar. Detta utnyttjar snabb och effektiv leverans av produkten utan att behöva bygga allt från grunden.

Referenser

  • Java API-dokumentation
  • Java-säkerhetsöversikt

  1. Ska du välja datatyperna PENGAR eller DECIMAL(x,y) i SQL Server?

  2. Hur SUBTIME() fungerar i MariaDB

  3. Anrop till en medlemsfunktion execute() på boolean in

  4. Hur man skapar en användare och beviljar behörigheter i Oracle