Database
 sql >> Base de données >  >> RDS >> Database

Une introduction à l'API de sécurité Java

La sécurité est l'une des parties les plus importantes du développement d'applications. Le langage Java facilite le développement d'applications sécurisées en fournissant de nombreuses options et fonctionnalités qui sécurisent les applications. Comme il s'agit d'un vaste sujet, cet article abordera quelques aspects clés des fonctionnalités de sécurité et des API disponibles sur la plate-forme Java.

Aperçu

La plate-forme Java, à partir de zéro, est conçue en gardant la sécurité à l'esprit. La propriété type safe du langage et le ramasse-miettes automatique indiquent que l'architecture Java a tenté d'intégrer les fonctionnalités de sécurité directement depuis son cœur.

Ces dernières années, la sécurité a été une préoccupation majeure. Par exemple, les navigateurs modernes s'efforcent de restreindre ou de réduire la prise en charge des plug-ins tels que Java, Silverlight et Flash, car ils peuvent être utilisés à mauvais escient pour incorporer du code malveillant dans un module complémentaire d'apparence inoffensive. Bien que l'environnement Java soit propre, la nature de l'applet est qu'elle télécharge du code non approuvé à partir du réseau public. Cela peut être une faille de sécurité majeure. De plus, le monde des navigateurs a considérablement changé ces dernières années. Le besoin absolu d'Applet est devenu presque obsolète. Peut-être que cela et principalement le problème de sécurité croissant ont rendu Applet obsolète de Java 9.

Cadre de sécurité Java

Les services de sécurité Java se sont développés et incluent un large ensemble d'interfaces de programmation d'applications (API), d'outils, un certain nombre d'implémentations d'algorithmes de sécurité, de mécanismes et de protocoles. Cela fournit un environnement complet pour développer des applications sécurisées et les gérer en conséquence.

La portée de l'API de sécurité Java est étendue. La base du développement d'une application sécurisée réside dans les interfaces cryptographiques et d'infrastructure à clé publique (PKI), plusieurs implémentations algorithmiques communes interopérables et d'autres services de sécurité. Il existe des interfaces pour effectuer l'authentification et le contrôle d'accès. Cela permet aux applications de se prémunir contre l'accès non autorisé aux ressources protégées.

Sécurité linguistique

Pour commencer, le langage lui-même est construit avec le souci d'imprégner la sécurité de son cœur. L'exemple le plus simple est peut-être l'incorporation de la sécurité de type. Type sûr signifie que les programmes ont un accès restreint à la mémoire lors de l'exécution. Ceci est réalisé en associant la mémoire uniquement aux objets Java. Les objets ont une classe correspondante qui définit leur comportement ; cela garantit que le programme ne peut agir dessus qu'en fonction du comportement défini. Cette idée résonne avec la vérification de type dynamique, mais Java intègre également une vérification de type statique complexe chaque fois que possible pour succomber à la limitation de son homologue dynamique. Par exemple, le vérificateur de code octet est un vérificateur de type statique efficace utilisé au moment de la compilation pour détecter tout type d'erreur et signaler de manière proactive au développeur. Le vérificateur de bytecode garantit qu'un bytecode légitime est exécuté en se conformant à la spécification du langage Java. En dehors de cela, il vérifie également les violations de mémoire, les sous-débordements de pile, les transtypages appropriés, etc. En plus de cela, il existe des modificateurs tels que privé, protégé et public pour affirmer un accès restreint.

Fournisseurs de sécurité

Les services agissent en tant que fournisseur de sécurité. Lorsqu'ils sont connectés à la plate-forme Java via des interfaces standard, ils permettent à l'application d'obtenir facilement des services de sécurité. L'avantage de ce mécanisme est que le développeur n'a pas à connaître les détails complexes et peut plutôt se concentrer sur l'intégration des fonctionnalités de sécurité dans l'application. Cette idée est encapsulée dans la classe abstraite appelée java.security.Provider . Le service de sécurité est obtenu via getInstance() méthode fournie par le fournisseur . Il peut y avoir de nombreux fournisseurs configurés, chacun ayant un nom et un numéro de version configurés dans chaque environnement d'exécution dans lequel il est installé. Par exemple, un programme peut obtenir un algorithme de résumé de message particulier en demandant éventuellement un fournisseur spécifique par son nom comme suit :

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

Cryptographie

Les API cryptographiques Java sont réparties en deux packages :java.security et javax.crypto . Java fournit une grande variété de services cryptographiques en implémentant un certain nombre d'algorithmes cryptographiques. Quelques-uns d'entre eux sont les suivants :

  • java.security.MessageDigest : Cette classe fournit l'implémentation d'une fonction de hachage unidirectionnelle qui prend des données de taille arbitraire et génère une valeur de hachage de longueur fixe. L'algorithme est nommé SHA-1 ou SHA-256.
  • java.security.Signature : Cette classe est utilisée pour fournir la fonctionnalité d'un algorithme de signature numérique tel que les algorithmes DSA, RSA ou DSA, en utilisant l'algorithme de résumé de message SHA-256. Une signature numérique est notamment utilisée pour garantir l'intégrité et l'authenticité des données numériques.
  • java.security.SecureRandom : Cette classe fournit des fonctionnalités pour générer un nombre aléatoire cryptographiquement fort.

Infrastructure à clé publique (PKI)

L'infrastructure PKI permet l'échange sécurisé de données à l'aide de la cryptographie à clé publique. Il englobe les clés, les certificats, le chiffrement à clé publique et les certificats numériques. Les classes liées à PKI sont stockées dans java.security et java.security.cert colis.

Authentification

Authentification est le processus de vérification de l'identité de l'utilisateur. Java permet à l'application d'effectuer l'authentification de l'utilisateur à l'aide du module enfichable. Il existe une classe appelée LoginContext dans le javax.security.auth.login emballer. Cette classe est instanciée avec un nom et un CallbackHandler. Le Contexte de connexion utilise le nom comme index de la configuration. La configuration détermine le LoginModule spécifique (javax.security.auth.spi.LoginModule ). Le CallbackHandler est passé au LoginModule pour demander le nom d'utilisateur et le mot de passe, dans une interface graphique, par exemple.

Communication sécurisée

La plate-forme Java implémente les protocoles SSL et TLS qui fournissent des fonctionnalités pour l'intégrité des messages, le cryptage des données et l'authentification client et serveur. Cela peut être utilisé pour ouvrir un passage sécurisé de communication de données entre pairs au-dessus du protocole HTTP ou TCP/IP. Le support de l'API pour l'implémentation peut être trouvé dans le javax.net.ssl emballer. Il existe de nombreuses classes de soutien; par exemple, le SSLSocket la classe est une extension de java.net.Socket class pour fournir un socket sécurisé utilisant le protocole SSL/TLS. Ce n'est rien d'autre qu'un socket de flux normal avec une couche de protection supplémentaire sur le protocole de couche de transport (TCP).

Contrôle d'accès

La classe de contrôle d'accès protège l'accès aux ressources sensibles telles que les fichiers locaux. Le java.lang.SecurityManager la classe médiatise tous les accès. Cette classe permet à l'application d'implémenter une politique de sécurité. Par conséquent, une éventuelle opération dangereuse peut être limitée dans la tentative, ainsi l'application a un contrôle total sur les opérations autorisées.

Conclusion

Il s'agit d'une présentation rapide des fonctions de sécurité, des fonctionnalités et des API de la plate-forme Java. Java fournit un support complet pour implémenter la sécurité dans une application où les développeurs peuvent parfaitement ignorer les complexités impliquées dans leur implémentation, tout en profitant de ses avantages. Cela permet une livraison rapide et efficace du produit sans avoir à tout créer à partir de zéro.

Références

  • Documentation de l'API Java
  • Présentation de la sécurité Java