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

Un'introduzione all'API Java Security

La sicurezza è una delle parti più importanti dello sviluppo delle applicazioni. Il linguaggio Java semplifica lo sviluppo di applicazioni sicure fornendo molte opzioni e funzionalità che rendono le applicazioni sicure. Poiché si tratta di un argomento importante, questo articolo tratterà alcuni aspetti chiave delle funzionalità di sicurezza e delle API disponibili nella piattaforma Java.

Panoramica

La piattaforma Java, da zero, è costruita tenendo a mente la sicurezza. La proprietà type safe del linguaggio e la Garbage Collection automatica afferma che l'architettura Java ha cercato di assorbire le funzionalità di sicurezza direttamente dal suo core.

Negli ultimi anni, la sicurezza è stata al centro dell'attenzione. Ad esempio, i browser moderni stanno lavorando per limitare o ridurre il supporto di plug-in come Java, Silverlight e Flash perché possono essere utilizzati in modo improprio per incorporare codice dannoso in un componente aggiuntivo dall'aspetto innocuo. Sebbene l'ambiente Java sia pulito, la natura dell'applet è che scarica codice non attendibile dalla rete pubblica. Questa può essere una grave violazione della sicurezza. Inoltre, il mondo dei browser è cambiato in modo significativo negli ultimi anni. L'assoluta necessità di Applet è diventata quasi obsoleta. Forse questo e principalmente il crescente problema di sicurezza ha reso Applet deprecato da Java 9.

Java Security Framework

I servizi Java Security sono stati ampliati e includono un ampio set di API (Application Programming Interface), strumenti, una serie di implementazioni di algoritmi di sicurezza, meccanismi e protocolli. Ciò fornisce un ambiente completo per sviluppare applicazioni sicure e gestirle di conseguenza.

L'estensione dell'API di sicurezza Java è ampia. La base dello sviluppo di un'applicazione sicura risiede nelle interfacce dell'infrastruttura a chiave pubblica e crittografica (PKI), nell'implementazione algoritmica comune interoperabile multipla e in altri servizi di sicurezza. Sono disponibili interfacce per eseguire l'autenticazione e il controllo degli accessi. Ciò consente alle applicazioni di proteggersi dall'accesso non autorizzato alle risorse protette.

Sicurezza linguistica

Per cominciare, il linguaggio stesso è costruito con la preoccupazione di assorbire la sicurezza nel suo nucleo. L'esempio più semplice è forse l'incorporazione della sicurezza di tipo. Digita sicuro significa che i programmi hanno un accesso limitato alla memoria in fase di esecuzione. Ciò si ottiene associando la memoria solo agli oggetti Java. Gli oggetti hanno una classe corrispondente che ne definisce il comportamento; ciò garantisce che il programma possa agire su di esso solo in base al comportamento definito. Questa idea risuona con il controllo del tipo dinamico, ma Java incorpora anche il controllo del tipo statico complesso, ove possibile, per soccombere alle limitazioni della sua controparte dinamica. Ad esempio, il verificatore di codice byte è un efficace controllo del tipo statico utilizzato in fase di compilazione per far emergere qualsiasi tipo di errore e segnalare in modo proattivo allo sviluppatore. Il verificatore di bytecode garantisce che un bytecode legittimo venga eseguito in conformità alla specifica del linguaggio Java. Oltre a questo, controlla anche la violazione della memoria, stack under/overflow, typecast corretti e così via. Oltre a questo, ci sono modificatori come private, protected e public per affermare l'accesso limitato.

Fornitori di sicurezza

I servizi agiscono come un fornitore di sicurezza. Se collegati alla piattaforma Java tramite interfacce standard, facilitano all'applicazione l'ottenimento dei servizi di sicurezza. Il vantaggio di questo meccanismo è che lo sviluppatore non deve conoscere i dettagli intricati e può invece concentrarsi sull'integrazione delle funzionalità di sicurezza nell'applicazione. Questa idea è racchiusa nella classe astratta chiamata java.security.Provider . Il servizio di sicurezza si ottiene tramite getInstance() metodo fornito dal Provider . Possono esserci molti provider configurati in cui ognuno ha un nome e un numero di versione configurati in ogni runtime in cui è installato. Ad esempio, un programma può ottenere un particolare algoritmo di raccolta dei messaggi richiedendo facoltativamente un provider specifico tramite il suo nome come segue:

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

Crittografia

Le API crittografiche Java sono distribuite tra due pacchetti:java.security e javax.crypto . Java fornisce un'ampia varietà di servizi crittografici implementando una serie di algoritmi crittografici. Alcuni di loro sono i seguenti:

  • java.security.MessageDigest: Questa classe fornisce l'implementazione di una funzione hash unidirezionale che prende dati di dimensioni arbitrarie e genera un valore hash di lunghezza fissa. L'algoritmo è denominato SHA-1 o SHA-256.
  • java.security.Signature: Questa classe viene utilizzata per fornire la funzionalità di un algoritmo di firma digitale come algoritmi DSA, RSA o DSA, utilizzando l'algoritmo di digest del messaggio SHA-256. Una firma digitale viene utilizzata soprattutto per garantire l'integrità e l'autenticità dei dati digitali.
  • java.security.SecureRandom: Questa classe fornisce funzionalità per generare un numero casuale crittograficamente forte.

Infrastruttura a chiave pubblica (PKI)

L'infrastruttura PKI consente lo scambio sicuro di dati utilizzando la crittografia a chiave pubblica. Comprende chiavi, certificati, crittografia a chiave pubblica e certificati digitali. Le classi relative alla PKI sono archiviate in java.security e java.security.cert pacchetti.

Autenticazione

Autenticazione è il processo di verifica dell'identità dell'utente. Java consente all'applicazione di eseguire l'autenticazione dell'utente con l'aiuto del modulo collegabile. Esiste una classe chiamata LoginContext in javax.security.auth.login pacchetto. Questa classe viene istanziata con un nome e un CallbackHandler. Il LoginContext utilizza il nome come indice della configurazione. La configurazione determina il Modulo di accesso specifico (javax.security.auth.spi.LoginModule ). Il gestore delle chiamate viene passato al LoginModule per richiedere nome utente e password, ad esempio in una GUI.

Comunicazione sicura

La piattaforma Java implementa i protocolli SSL e TLS che forniscono funzionalità per l'integrità dei messaggi, la crittografia dei dati e l'autenticazione di client e server. Questo può essere utilizzato per aprire un passaggio sicuro di comunicazione di dati tra peer su HTTP o protocollo TCP/IP. Il supporto API per l'implementazione può essere trovato in javax.net.ssl pacchetto. Ci sono molte classi di supporto; ad esempio, SSLSocket class è un'estensione di java.net.Socket classe per fornire un socket sicuro utilizzando il protocollo SSL/TLS. Questo non è altro che un normale socket di flusso con un ulteriore livello di protezione sul protocollo del livello di trasporto (TCP).

Controllo accessi

La classe di controllo dell'accesso protegge l'accesso a risorse sensibili come i file locali. Il java.lang.SecurityManager la classe media tutti gli accessi. Questa classe consente all'applicazione di implementare una politica di sicurezza. Pertanto, una possibile operazione non sicura potrebbe essere limitata nel tentativo, quindi l'applicazione ha il pieno controllo sulle operazioni consentite.

Conclusione

Questo è un rapido tour delle funzionalità, delle funzionalità e delle API di sicurezza della piattaforma Java. Java fornisce un supporto completo per implementare la sicurezza in un'applicazione in cui gli sviluppatori possono essere beatamente inconsapevoli delle complessità coinvolte nell'implementazione, ma trarne vantaggio. Ciò sfrutta la consegna rapida ed efficiente del prodotto senza dover costruire tutto da zero.

Riferimenti

  • Documentazione API Java
  • Panoramica sulla sicurezza Java