Vous aimez ce que vous lisez sur ce blog ?
Envie d'aller plus loin avec véritable formation d'expertise en Java ?
Venez suivre ma formation Masterclasse Expertise Java !

"Même un développeur experimenté a besoin de continuer à apprendre. Et dans cette formation... j'ai appris beaucoup !" - A.G., Java Champion

Prochaines sessions inter-entreprises : 28-31 mars 2017 / 13-16 juin 2017
Sessions intra-entreprises sur demande.
Inscrivez-vous vite !

Critique de livre : GlassFish Security

GlassFishSecurity.pngIl y a deux mois, avant de partir en vacances, j'ai été contacté par Packt Publishing pour faire la revue de leur tout nouveau livre GlassFish Security, écrit par Masoud Kalali.

Vous allez voir, le hasard fait bien les choses : ils ne pouvaient pas mieux tomber.

  • D'une part, je venais de terminer le livre d'Antonio (j'en reparlerai), dans lequel GlassFish laissait entrevoir sa puissance ;
  • D'autre part, je sortais d'une courte mission de conseil sur la mise en place d'une architecture SSO sur une plateforme Java, pour laquelle j'avais eu beaucoup de mal à trouver la moindre documentation correcte (et compréhensible) - d'autant plus qu'Oracle était en plein sabotage d'OpenSSO...

Bref, le temps que la Poste fasse son office, me voilà donc avec ce fameux GlassFish Security entre les mains.

Recette de poisson aux petits oignons

Bon, alors, voyons voir ce livre.
Concrètement, y'a quoi dedans ?

Au recto, le titre "GlassFish Security" est assez laconique, mais le sous-titre est nettement plus explicite :

Secure your GlassFish installation, Web applications, EJB applications, application client modules, and Web Services using Java EE and GlassFish security measures.

La couverture porte également les logos des produits OpenSSO et OpenDS, tout cela fait très sérieux.
Le message subliminal véhiculé par l'illustration (volontairement ou non) est amusant : un littoral protégée par des rochers acérés, qui semblent défier les pirates d'accoster. Ou alors, j'ai juste trop d'imagination :)

Au verso de la couverture, on trouve un texte expliquant le contenu et la population cible du livre ("designers, developers and administrators who work with GlassFish"), ainsi qu'un sommaire détaillé.
Et c'est là qu'on s'aperçoit que le livre va beaucoup plus loin que la configuration de GlassFish en tant que serveur d'application : c'est bel et bien à la sécurisation de l'ensemble de la plateforme de production que l'on s'attaque au fil des chapitres !

Suivez le guide

Chapitre 1 - Java EE Security model

Le domaine de la sécurité est complexe et parfois intimidant. Pour éviter un choc trop brutal, le chapitre 1 débute par quelques rappels généraux sur l'architecture standard d'une application Java EE (module web, module métier, module client) et les différentes technologies s'y rattachant (EJB, Servlets...).

Une fois ces bases posées, il analyse en détail comment sécuriser les Servlets et les EJB : les différentes méthodes d'authentification (basic, formulaire, certificat), la configuration des droits d'accès (autorisation), la gestion des groupes et des rôles... Le module "client d'application", généralement assez méconnu, est également couvert.

A noter, tous les modes de configuration sont passés en revue : XML, annotations, et par API.

Chapitre 2 - GlassFish security realms

Dans le petit monde de la sécurité, un univers ("realm") représente un moyen de stocker et de vérifier des identités.

Le chapitre 2 explique en détail comment configurer les différents realms proposés par GlassFish : fichier, JDBC, LDAP, utilisateur Solaris, par certificat... Et si cela ne suffisait pas, le livre explique même comment développer son propre realm, pour épater belle-maman au prochain repas de famille.

Si vous n'avez jamais utilisé LDAP ou un certificat de sécurité, pas de panique : l'auteur prend tout le temps nécessaire pour expliquer ces concepts très clairement.

Même s'il s'agit davantage d'un chapitre de référence que d'un tutorial, sa lecture est enrichissante, surtout si comme moi vous avez principalement développé sur des architectures "légères" de type tomcat / spring, où la gestion de l'authentification incombe souvent à l'application elle-même.
On s'aperçoit qu'avec un bon serveur d'application, pas besoin de réinventer la roue à chaque projet.

Chapitre 3 - Designing and developing secure Java EE applications

Maintenant que les bases sont posées, il est temps de passer à la pratique. Le chapitre 3 nous guide pas à pas dans le développement et la sécurisation d'une application Java EE complète, depuis l'analyse des requirements jusqu'au déploiement sur le serveur.
L'application, simple mais couvrant tout le spectre des composants Java EE sécurisables, sert d'exemple pour toute la suite du livre.

Le chapitre 3 est disponible gratuitement en PDF, allez donc y jeter un oeil !

Chapitre 4 - Securing GlassFish environment

Bon, là on attaque les choses sérieuses.

Jusqu'ici, nous nous sommes intéressés aux applications Java EE, c'est-à-dire surtout du code et un peu de configuration. Mais en entreprise, les applications ne représentent qu'un petit maillon de la plateforme de production. Et si l'on veut obtenir un système fiable, c'est la plateforme tout entière doit être sécurisée : l'application, le serveur d'applications, mais aussi le système d'exploitation - de type Unix/Linux, soyons sérieux.

Ce chapitre explique donc comment protéger l'aquarium dans lequel notre poisson évolue : tout d'abord, comment créer un compte (utilisateur) spécial, de manière à l'isoler des autres processus ; ensuite, comment tirer parti des mécanismes d'administration de l'OS pour restreindre le compte en termes de consommation mémoire et disque, et d'accès aux interfaces réseau.

Nous découvrons également que Java possède un mécanisme similaire : JAAS. Ce framework bas niveau est le véritable gendarme de la JVM ; il peut lui interdire d'exécuter du code, d'accéder à des fichiers ou à des interfaces réseau...
JAAS se configure par le biais de fichiers ".policy", dont l'auteur explique le format et le fonctionnement. Les règles qui y sont définies sont ensuite appliquées par le SecurityManager intégré à GlassFish.

Grâce aux mécanismes propriétaires de l'OS et à JAAS, un administrateur de plateforme Java EE peut maîtriser parfaitement les privilèges de GlassFish et protéger l'OS de tout code Java malicieux.

Au final, ce chapitre est assez... spécial.
Il pourrait avoir du mal à intéresser un développeur, généralement assez peu concerné par l'administration de la plateforme de production, mais peinera également à captiver un administrateur système, peu enclin à s'intéresser aux subtilités de la JVM.
Pourtant, je recommande vivement sa lecture à ces deux populations, qui pourraient y trouver un terrain d'entente.

Chapitre 5 - Securing GlassFish

Une fois que le serveur est installé dans un environnement sain, il est temps de sécuriser l'accès à GlassFish lui-même.
Le serveur dispose de nombreux connecteurs (HTTP, JMX et ORB, et bien sûr son interface en ligne de commandes) qu'il faut protéger par des mots de passe et/ou des certificats, sur des liaisons sécurisées.

Illustré de nombreuses captures d'écran, ce chapitre est très facile à suivre, mais vous pouvez très bien le passer si vous n'en avez pas l'usage immédiat. Dans tous les cas, c'est une bonne référence à conserver à portée de main.

Chapitre 6 - Introducing OpenDS : open-source directory service

A partir d'ici, nous entrons dans les "extras", car tout ce qui concerne Java EE et GlassFish à proporement parler a été traité dans les précédents chapitres.
Pourtant, ce sont ces extras qui font à mon avis toute la valeur du livre, car ils synthétisent, de manière claire et pratique, une documentation souvent fragmentée ou obsolète sur internet - en particulier sur OpenSSO, comme je l'indiquais plus haut.

Le chapitre 6 concerne OpenDS, un annuaire d'entreprise (directory service) opensource implémentant les protocoles LDAP et DSML.
Sa lecture ne requiert aucune connaissance préalable - encore une fois, l'auteur prend le temps d'expliquer les concepts fondamentaux avant de se lancer dans le vif du sujet, ce qui est très appréciable.

Sur pas moins de 30 pages, on peut ainsi apprendre :

  • ce qu'est un annuaire d'entreprise, et comment se positionne OpenDS ;
  • comment installer et administrer OpenDS : démarrer le serveur, importer et exporter les données, effectuer des backups, et activer JMX pour l'administrer à distance (de manière sécurisée, bien sûr) ;
  • comment intégrer le moteur d'OpenDS dans une application (mode embedded) ;
  • et enfin, comment mettre en place un cluster pour garantir sa disponibilité.

Un chapitre très complet donc, à la fois tutorial et petit manuel d'administration.
Le site de l'éditeur propose au téléchargement un fichier contenant des utilisateurs de test, directement importable dans OpenDS.

Chapitre 7 - OpenSSO, the single sign-on solution

Ah, OpenSSO, un nom qui fait à la fois peur et rêver en entreprise... Et il faut bien dire qu'il y a de quoi : le sujet est d'une complexité impressionnante, et s'appuie sur de nombreuses normes et technologies.
C'est pourquoi le livre y consacre 3 chapitres pleins : celui-ci, qui se concentre sur l'installation et l'administration d'OpenSSO ; et les chapitres 8 et 9, qui expliquent respectivement comment l'intégrer aux applications Java EE et aux webservices.

Le chapitre se découpe en trois parties.
La première pose les bases. Après une rapide explication des enjeux et acronymes liés au SSO, il présente l'architecture générale d'OpenSSO et son processus d'installation.
La seconde partie utilise la console d'administration pour configurer les politiques d'authentification - définition des realms, chaînage des modes d'authentification...
La troisième partie, enfin, démontre l'utilisation les API REST pour l'authentification, l'autorisation et évidemment la vérification des tokens de single sign-on.

Chapitre 8 - Securing Java EE applications using OpenSSO

Une fois que le serveur OpenSSO est en place, voyons comment lui demander de protéger l'application d'exemple déployée sur GlassFish.

Plutôt que de demander aux applications supervisées d'effectuer elles-mêmes les appels REST pour l'identification, l'authentification et la vérification des tokens de single sign-on, OpenSSO fournit un certains nombre d'Agents spécialisés, qui se placent en amont des ressources sécurisées et assurent la liaison avec le serveur de SSO. Il en existe pour la majorité des serveurs d'applications, et même pour Apache Httpd et IIS.

L'installation d'un Agent au sein de l'application d'exemple est facile (c'est un filtre de servlet), et la console d'adminstration permet ensuite de le configurer : URLs protégées, page de login...

Chapitre 9 - Securing web services with OpenSSO

Pour finir, la sécurisation des Webservices demande un soin spécial.
Les producteur et consommateur pouvant être des systèmes et technologies hétérogènes, il est nécessaire de passer par une autorité de confiance tierce pour délivrer et vérifier les jetons. Une myriade de protocoles entrent alors en jeu : XML Encryption, XML Signature, toute la famille des protocoles WS-*, SAML, XACML, XKMS...
Là encore, OpenSSO fournit des Agents se chargeant de tout le travail ingrat.

Tout ceci est bien évidemment mis en application en développant puis en sécurisant un webservice d'exemple.

Ces trois chapitres (6-7-8) sont excellents ; il démystifient OpenSSO et expliquent enfin clairement comment l'installer et l'utiliser facilement. Même si vous ne comptez pas utiliser OpenSSO prochainement, leur lecture est recommandée car elle vous donnera une compréhension globale du produit.

Conclusion

Alors, finalement, ce livre est-il bien ? Tient-il ses promesses, et justifie-t-il son prix de $45 ?

Je vous ai fait une description plutôt enthousiaste des chapitres, et je ne retire rien de ce que j'ai écrit : ce livre est réellement intéressant sur le plan technique. J'ai apprécié son approche à 360° du problème de la sécurisation des plateformes Java EE : l'intégration de chapitres sur OpenDS et OpenSSO est à mon sens un énorme plus.
De plus, l'auteur semble maîtriser le sujet et veille à expliquer clairement chaque nouvelle notion rencontrée, afin de ne pas perdre le lecteur.
Sur le fond, donc : 5 / 5.

Par contre, sur la forme, j'ai beaucoup à redire : en un mot, ce livre est très intéressant mais pénible à lire.

  • Tout d'abord, l'anglais. Ne vous méprenez pas : lire un livre en anglais, même très technique, ne me pose aucun problème - à condition qu'il soit écrit correctement. Or, certains paragraphes relèvent davantage de BabelFish que de GlassFish, malgré la collaboration de 7 (!) reviewers... De nombreuses phrases sont incomplètes, et/ou mal conjuguées - ue vraie catastrophe par endroits.. De même, l'ordre des paragraphes n'est pas toujours très logique, et de nombreuses répétitions sont présentes.
  • Ensuite, il faudrait vraiment penser à numéroter les différentes sections au sein des chapitres. La différence de taille des polices dans la hiérarchie des titres et sous-titres n'est pas flagrante, et il est très facile de se perdre. Et puis, pour retrouver une information précise au sein d'un gros chapitre, c'est tout simplement indispensable.
  • Enfin, il serait bon de corriger les quelques désynchronisations entre le texte, les schémas, et les exemples de code - certaines sont déjà signalées dans les errata.

Ce qui est frustrant, c'est que ces petits problèmes auraient pu être facilement corrigés par un relecteur professionnel attentif et nativement anglophone. Mais dans l'état actuel, ils donnent dès les premières pages une très mauvaise image du livre, qui peut faire douter le lecteur de sa pertinence technique - ce qui serait vraiment dommage.
Sur la forme : 2 / 5

En conclusion, si vous pouvez passer outre les gros problèmes de forme, je pense que GlassFish Security aura très bien sa place dans votre bibliothèque technique. A la fois tutorial et référence, il a le gros avantage de présenter de manière claire des technologies habituellement complexes et peu accessibles.
Dans le cas contraire, il ne vous reste qu'à espérer que Packt Publishing en publie prochainement une version révisée, ou une traduction française...


Commentaires

1. Le vendredi 27 août 2010, 09:06 par evenisse

Excellente critique et correspond exactement à ce que j'en pense. La forme m'a également perturbé quand j'ai eu la chance d'en faire la revue technique des drafts des chapitres.

2. Le vendredi 27 août 2010, 09:08 par Antonio

Bonjour,

Etant un des reviewers technique je vais apporter 2-3 précisions (je me base sur le draft car je n'ai pas eu le temps de lire la version final)

1. Lors de la relecture technique, ce n'est pas notre tache de corriger les fautes d'orthographe et de grammaire (donc ce n'est pas 7 reviewers).
2. L'ordre des paragraphes : On reçoit les paragraphe au fur et à mesure avec une fiche à remplir avec en particulier une question sur ce qu'on voudrait avoir dans le paragraphe suivant. Et donc l'auteur a sa logique pour l'enchainement des paragraphe et je suis d'accord que cela ne peut pas plaire à tous le monde.
3. Pour la synchro texte/schéma, dans les drafts qu'on a eu il n'y avait pas toujours les schéma
4. Pour l'anglais, c'est clair que c'est pas le meilleur anglais que j'ai lu et que j'ai du relire plusieurs fois certaine phrases mais il a l'avantage de rester simple et donc accessible à de nombreuse personnes non anglophone.

Sinon je suis d'accord avec ta conclusion sur le faite que c'est un bon livre assez complet et accessibles.
Pour la forme, faudrait que je lise la version finale.

Antonio

3. Le vendredi 27 août 2010, 09:37 par Olivier Croisier

Bonjour,

Merci de vos retours.
Je suis pleinement conscient qu'il y a deux types de reviewers : techniques et non-techniques. Encore une fois, je n'ai rien à redire sur l'aspect technique du livre, vous avez fait du bon boulot. Par contre, je pense que c'est de la responsabilité de l'éditeur de s'assurer que la forme est à la hauteur du fond, surtout sur un sujet aussi sensible que la sécurité.

Olivier

4. Le vendredi 27 août 2010, 10:10 par Masoud Kalali

Olivier,

About the content: I tried to include as much information and description in the book as the pages count and the overall layout allowed in order to convey what readers need to know. I am happy to see that I have been successful with this goal.

I tried my best to keep the book text as simple as possible for everyone to follow the content and the context without facing too many new words, expressions and structures. It appears that in your view I have failed to reach my goals in this front.

I do no comment on your critics as I will be biased if I do so. I leave it to other readers to write about their reading experience.

Thanks for the review.

Masoud

5. Le vendredi 27 août 2010, 10:20 par Julien S

Bonjour Olivier,

merci pour cette critique très complète!

Je me pose une question (peut-être hors sujet mais je tente) sur le contenu du livre.
Comme il semble balayer un scope assez large, est-ce qu'il aborde la problématique de la fonction "se souvenir de moi", ce que Spring Security appelle "remember me" ?

Merci!

Julien

6. Le vendredi 27 août 2010, 10:35 par Olivier Croisier

@Masoud
Thank you for reading the review !

@Julien
Je ne me souviens pas, il faudrait que je vérifie. Mais étant donné que SSO fonctionne grâce à des tokens passés via des cookies, je pense que le système doit se "souvenir" des utilisateurs authentifiés tant que le cookie n'est pas effacé (et que le token n'a pas expiré, bien sûr).

7. Le vendredi 27 août 2010, 16:47 par Thomas Queste

Excellente review !

On a la même chose pour WebSphere ? :-D

Tom

8. Le samedi 28 août 2010, 16:34 par Christophe

Salut,

merci pour la critique, elle donne quand même envie de lire le livre pour le fond.

Par contre à lire ton descriptif, j'aurai plutôt attendu un titre comme "Java EE Security with GlassFish".
En dehors du chapitre 5, on a plutôt l'impression que le livre s'applique pour en général et utilise GF pour l'exemple.
A la première lecture je pensais que les gens qui ne sont pas intéressés par GF ne trouveront rien dans le livre.

Christophe

9. Le lundi 30 août 2010, 09:27 par louis gueye

Bonjour,

Review très bien rédigée. C'est appréciable et vaut la peine de souligner l'effort et le talent de rédacteur.
Malgré les quelques aspects négatifs sur la forme on a envie de lire le livre.

Louis.

10. Le lundi 30 août 2010, 13:07 par Olivier Croisier

Merci pour cette appréciation :)
Et effectivement, le livre est bien, lisez-le !

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.