As a member of the LSM staff, I organize a track about IAM. The schedule is almost closed, including:
Pat Patterson, from OpenSSO, the famous Access Manager (SSO) of Identity Federation tool from Sun (english)
Ludovic Poitou, from OpenDS, the future Sun’s Directory Server (english or french)
Clément Oudot, from LemonLDAP::NG, an opensource Web SSO (english or french
Tomas Gustavsson, from EJBCA, the most famous opensource PKI product (english)
Jonathan Clarke, from LSC, a tool to synchronize directory from JDBC or LDAP (english or french)
Myself, introducing about IAM, especially the provisionning (french)
This day is planned for July, the 10th, at Nantes. Check LSM website to register in a near future (registration are not opened yet). For OpenDS, LemonLDAP::NG and LSC talks, the language will be choosen according the audience.
Suite à mon article et la création d’une imageVMWare pour démontrer l’utilisation d’EJBCA et d’OpenSSO pour faire de l’authentification X509 client, Pat ma gentiment demandé si je pouvais écrire un article à ce sujet. Et c’est maintenant chose faite, l’article est disponible ici. En route pour la deuxième partie !
Malgré une santé économique plus ou moins bonne, des licenciements, (mais a contrario une bonne publicité) ça bouge beaucoup chez Sun, notamment dans le domaine de l’IAM. Pour preuve, il suffit de regarder l’activité autour d’OpenSSO, et de WebSpaces
Pour OpenSSO, comme le montre la roadmap, il y a des choses fort intéressantes en prévision. Comme par exemple un mandataire inverse (reverse proxy) avec la possibilité de gérer des accréditations secondaires. En pratique, cela permet de protéger une application où il est impossible d’installer un agent, et qui ne supporte pas SAMLv2. De manière concrête, cela se traduit par de l’injection de formulaires (fillform) du login/mot de passe de l’utilisateur. La solution d’un mandataire inverse permet de rendre plus faible (et surtout plus quantifiable avant vente) les coûts d’intégration d’une application dans un SSO.
D’autres points notables concernant OpenSSO résident dans l’avancé du support d’OpenDS (avec reset du mot de passe), et la création d’une fedlet en .Net.
WebSpaces
Je n’ai encore pris longtemps pour faire un billet sur WebSpace, mais je tacher de résumer de manière rapide. Glassfish WebSpace est le fruit du partenariat entre Sun et Liferay, avec pour objectif de créer une nouvelle version de Sun Portal Server (ce qui d’ailleurs, ne fais pas que des heureux parmi les clients actuels, à juste titre). WebSpace est fourni avec un certain nombre de porlet existantes, dont certaines orientées enterprise. Je m’intèresse particulièrement à la porlet Workflow, qui permet de créer des petits processus (workflows) simples, comme par exemple la gestion des notes de frais (c’est l’exemple fourni). Pour ma part, j’ai comme objectif de créer une porlet de demande de congé (avec double approbation). J’en dirais plus dans un prochain billet !
Interest by OpenSSO (especially in the Access Manager part)? If yes, you should be interest by my VMWare image. The image was made to demonstrate an application protected by opensso. The application is divided in three parts, the first one is available for everyone (non authenticated users). The second part, the secure area, is available only for users authenticated in OpenSSO, and members of group employee. And finally, only users authenticated by certificates and member of group employee can access to the very secure area.
You need to give >= 1024MB of memory for the image. Indeed, lot of services are required for the demonstration. (One Tomcat, one JBoss, one OpenDS, and one Glassfish).
Boot the image, some services may take few minutes to start, depends of your configuration
Login using root account, with password root
When you opened the VMX file from VMWare, it ask if your copy or moved the virtual image. If you choose copy, you need to execute the following commands to get network working:
Execute the command ifconfig eth and identity the IP address of the image
On the host system (your desktop, NOT on the image) edit your /etc/hosts (or equivalent) file, add the following line:
172.16.19.136 opensso.local.asyd.net
Start your favorite browser, hit http://opensso.local.asyd.net:8000/ and follow instructions. The first access to each application may take some few minutes, be patient!
As usual, any feedbacks are welcome.
Notes:
In order to access to the very secure area, after importing the certificate, you usually need to restart your browser. Indeed, most of browsers use a persistent HTTP/1.1 session with server, in this case, the HTTPS negociation is made only one time.
The glassfish’s console is http://opensso.local.asyd.net:4848/ not http://opensso.local.asyd.net:4848/opensso
Suite à une petite discussion avec Tomas (de PrimeKey) sur OpenSSO, nous nous étions dis qu’un petit exemple d’utilisation conjointe d’OpenSSO et d’EJBCA serait intéressant (ne serait-ce qu’au niveau marketing , voici le résultat de mon travail.
Avant tout, voici le cas d’utilisation, assez simple en fait. Soit une application disposant de trois parties :
une partie publique, accessible à tout le monde
une partie privée, accessible uniquement aux membres d’un groupe donné
une partie super privée (oui bon, si vous avez un meilleur terme !), accessible uniquement aux membres d’un groupe (qui peut être le même que précédemment), mais dont l’authentification doit être obligatoirement effectuée par certificats.
En fait, suite aux divers billets du présent blog, cela peut paraître relativement simple, et étrangement, une fois les petits soucis réglés, ca se fais assez bien. Cela m’a permis d’aborder pas mal de nouvelles notions dans OpenSSO, notamment sur les stratégies (pour le contrôle d’URL), qui n’est pas forcément très intuitif. J’ai surtout passé du temps sur l’écriture des règles, car dans mon cas (une petite application JSF développée très rapidement avec NetBeans) l’URL que je dois préciser dans les règles sont différentes de celles visibles par le navigateur. J’imagine que l’ordre dans lequel les filtres sont déclarés dans le fichier web.xml de l’application y sont pour quelques choses.
Quelques points à retenir (surtout un pense bête personnel) :
pour la configuration de la chaîne d’authentification, j’en ai créée une nouvelle avec les deux modules (X509 et DataStore) en SUFFISANT, attention l’ordre est important, l’instance du module X509 doit donc être placé avant celle du DataStore)
l’accès aux pages publiques s’effectuent via la propriété NOT ENFORCED URI (qui permet de dire à l’agent d’ignorer certaiens URL)
définir l’URL du 403 dans le web.xml, la rajouter en NOT ENFORCED URI
si l’url du 403 est défini dans le web.xml, ne pas la définir au niveau de l’agent
j’ai attribué un score de 10 à l’authentification par certificat
j’ai utilisé deux stratégies, l’une pour autoriser l’accès à la partie sécurisée (en ayant un pattern matching d’URL assez fin). Une autre pour autoriser l’accès à tout (donc y compris la partie super sécurisée) mais en rajoutant une condition sur le niveau d’authentification
ne pas oublier de modifier le fichier bootstrap si on ne veut pas utiliser le royaume par défaut
Je mettrais bientôt en ligne une image VMWare (fusion, je ne sais pas si elles sont compatibles avec les autres) qui contient le serveur opensso, l’ejbca, et l’application. Prévoyez au moins 1GB de RAM rien que pour la machine virtuelle !
Vous trouvez la gestion de l’authentification rsync un peu faible ? Si oui, vous n’êtes pas le seul, c’est pour cela que Fabrice Bacchella a écris un patch pour rsync permettant d’utiliser l’authentification kerberos. Ce patch et sa documentation sont disponibles sur ma miniforge (et oui j’en profite pour me faire un peu de pub au passage !)
J’avoue, sur ce coup-là Sun me surprend. Je viens de découvrir en effet qu’ils commencent à mettre à disposition leurs matériels de training concernant OpenSSO. Actuellement, seul le cours sur le déploiement est disponible, mais c’est déjà une très bonne chose !
Lors de la configuration d’OpenSSO, un répertoire (par défaut) $HOME/opensso est utilisé pour y stocker une instance d’opends. Néanmoins, la distribution n’est pas complète, pour procéder à la sauvegarde d’une instance, vous devez copier les répertoires bin et lib d’une archive OpenDS classique (tout ceci dans le répertoire $HOME/opensso/opends).Vous pouvez maintenant procéder à un export LDIF en utilisant la commande suivante :
Pff, j’ai finalement réussi à installer l’application de démonstration de FAM8/opensso, et donc l’agent nécessaire à son bon fonctionnement, tout ceci avec le dernier build d’OpenSSO, à savoir le 4.5.
Quelques informations avant de commencer :
environnement de test : opensso servi par glassfish v2ur2 sur Mac OS X, agentsample servi par glassfish v2ur2 sur une debian
dc=opensso,dc=java,dc=net comme suffixe de configuration dans opensso (très important pour utiliser le build de l’application d’exemple, si vous utilisez un autre domaine, vous devrez recompiler l’application)
Rentrons dans le vif du sujet :
installer OpenSSO (attention aux limitations de conteneur, veillez à bien prendre en considération la Release notes)
se rendre sur http://hostname:8080/opensso, attention à bien utiliser un nom DNS, et pas localhost
choisir la configuration personnalisée, attention à bien spécifier le nom de domaine du cookie, dans mon cas .asyd.net, dans sa configuration standard, OpenSSO utilise un passage de cookie, les applications protégées doivent donc être obligatoirement dans le même domaine DNS, avec un domain cookie suffisamment large
encore une fois, vérifiez bien que l’URL d’opensso utilise bien le bon nom dns
sur le serveur hébergeant l’application cliente, télécharger et installer glassfish v2ur2
télécharger l’agent approprié
utiliser la commande ./agentadmin install, une fois installé, se rendre dans le répertoire Agent_001/config, puis copier le fichier FAMAgentConfiguration.properties sur le serveur hébergeant opensso (la commande agentadmin vous demandera l’URL pour accéder à opensso, l’URL à protéger, un login et un mot de passe correspondant à un compte de type agent, celui-ci sera crée plus tard)
déployer les applications agentapp.war (disponible dans le répertoire etc de l’agent) et agentsample.ear (répertoire sampleapp/dist/ de l’agent)
sur le serveur opensso, se rendre dans le répertoire opensso/tools, extraire l’archive famAdminTools.zip puis lancer le script setup, le répertoire attendu correspond à celui fourni lors de l’installation d’opensso, par défaut $HOME/opensso
rajouter une ligne userpassword=<password>, où password correspond au mot de passe fourni lors de l’installation de l’agent. Le mot de passe doit être en clair.
utiliser la commande famadmin pour créer l’agent (/bin/famadm create-agent -b agent1 -t J2EEAgent -u amadmin -f /tmp/password -D config/FAMAgentConfiguration.properties -e ‘/’), le fichier /tmp/password doit contenir le mot de passe du copte amadmin, sur une ligne, et le fichier avec les droits 400
vérifier que l’objet agent est bien crée, se connecter en tant qu’administrateur sur opensso, puis sur Contrôle d’accès, puis sur le domaine opensso, sur Agent, puis finalement J2EE, vous devriez trouver l’agent
Si vous essayer de vous connecter sur http://host2:8080/agentsample/ vous devriez être redirigé vers la page d’opensso, puis vers une page vous notifiant que vous accédez à une ressource protégée, la configuration n’est encore pas finie !
connecter vous en tant qu’administrateur sur l’opensso
créer un groupe manager puis un groupe employee
créer un utilisateur appartenant aux deux groupes sus cités
créer une nouvelle stratégie (p1), puis une nouvelle règle (s1), comme nom de ressource, spécifier la valeur http://<host2>:8080/agentsample/*, puis autoriser le GET et le POST
créer maintenant un nouvel objet, de type Objet d’identité Access Manager
rajouter un filtre sur le groupe employee
reconnecter vous (un redémarrage du serveur glassfish host2 peut être nécessaire) sur l’application agentsample, vous devriez pouvoir accéder maintenant à l’ensemble de l’application
Dès lors, tous les membres du groupe employee peuvent accéder à l’application. Vous pouvez vérifier si un utilisateur appartient au groupe manager en cliquant sur le lien J2EE Security API puis sur Invoke Security Aware Servlet, une ligne vous informera des groupes auxquels votre utilisateur appartient.
Voilà, enfin, j’y suis arrivé, pas très simple quand même
Suite à la sortie d’OpenSSO en build 4.5, j’ai décidé de m’y remettre un peu, et vous propose à travers cet article de configurer pas à pas une authentification par certificat dans OpenSSO. Tout d’abord, si vous désirez tester OpenSSO 4.5, veillez absoluement à consulter la releases notes, elle contient une étape de configuration indispensable ! (notamment le remplacement d’une variable JVM).
Une fois l’étape de configuration d’OpenSSO effectuée (configuration par défaut dans mon cas) j’ai commencé par créer un nouveau magasin de données du type LDAP, utilisant un annuaire OpenDS tournant en local. Associer ce nouveau magasin à un nouveau domaine (realm), puis tester la configuration. N’oubliez pas de rajouter le paramètre ?realm=<nom> à l’URL de login, le message doit préciser qu’un data store de type LDAP est utilisé.
Bref, une fois le magasin de donné créer et fonctionnel, il nous reste encore quelques étapes :
ajout de l’autorité de confiance dans le truststore de glassfish
création d’un certificat serveur (étape optionnelle mais recommandée)
création et configuration du type certificat
Pour rajouter l’autorité de confiance dans le magasin de glassfish, assurez vous de disposer du certificat d’autorité au format PEM (codé en base64), puis exécuter la commande suivante (dans le répertoire domains/domain1/config du répertoire d’installation de glassfish) :
Le mot de passe par défaut du truststore et du keystore est changeit.
Pour rajouter mon certificat serveur dans le keystore, j’ai utilisé l’outil portecle pour importer mon fichier PKCS#12 dans le fichier keystore.jks (mot de passe : changeit). Attention à bien définir changeit comme mot de passe de la clé lors de l’étape d’importation. Connectez vous à l’interface d’administration de glassfish pour modifier le nom de l’alias biclé/certificat à utiliser pour le serveur HTTPS (Configuration / HTTP Services / HTTP Listeners / http-listener-2, Onglet SSL, définir Client authentification à enabled, puis modifier le champ Certificate NickName pour y définir le nom de l’alias du keystore). Sauvegarder puis redémarrez glassfish.
Vérifier que votre navigateur dispose d’un certificat client valide, puis connectez vous sur le port HTTP de glassfish. Tout d’abord examiner le certificat serveur proposé afin de s’assurer qu’il corresponde bien à celui attendu. Si vous n’arrivez pas à vous connecter, et que votre navigateur fais référence à une erreur SSL c’est probablement parce que vous avez réussi à ajouter le certificat serveur dans le fichier keystore.jks, mais que vous ne disposez pas de certificat client associé (ou que vous avez échoué à l’importation du fichier d’autorité dans le fichier cacerts.jks)
L’environnement SSL est désormais prêt, il nous reste à configurer OpenSSO. Pour cela, rendez vous dans le menu Authentification de votre domaine (royaume) puis créer une nouvelle instance de module. Choisissez le type Certificat, et sauvegarder. Cliquer maintenant sur le nom de l’instance. Dans un premier temps, utiliser la configuration suivante
Faire correspondre le certificat avec LDAP : désactivé
Champ de certificat pour accéder au profil utilisateur : objet UID (cela implique de disposer de l’attribut UID dans le DN du porteur du certificat)
Enregistrer, puis revenir à la page Authentification.
Créer un nouvel enchaînement d’authentification (sic), nommé X509Service
Ajouter un nouvel élément puis sélectionner l’instance de module crée préalablement
Sauvegarder
Cliquer sur le bouton Revenir à authentification
Définir le nouvel enchaînement d’authentification comme chaîne d’authentification par défaut
Sauvegarder
Puis tenter de vous reconnecter sur le port https avec votre certificat utilisateur (n’oubliez pas de préciser ?realm=<nom du domaine> dans l’URL de login utilisé)
Si cela fonctionne, vous êtes automatiquement redirigé vers la page d’édition de votre profil utilisateur.