Archive

Posts Tagged ‘opensso’

OpenSSO strict cookie value

February 22nd, 2010 1 comment

At my work, we’re currently working on a new J2EE platform to host our webapp applications, based on Tomcat 6 (6.0.24 to be precise). After deployed few fully public webapps without any issue, we start to deploy some other webapps with an authenticated part. The authentication is based on OpenSSO, using REST APIs. The cookie is created to OpenSSO, then set (client side) by one of our own webapplication. This cookie is validate using isValidToken REST API on every application the user goes. However, we’re not able to get authentication working on the preproduction environment, while it working perfectly on the dev environment. After some investigations with the developpers, we notice the OpenSSO’s cookie value was truncated.

After reading this post on the tomcat’s user mailing list, we start to configure tomcat. Few hours after, I was thinking about change the tomcat configuration is only a workaround, without fixing the original problem. Thanks to the OpenSSO’s IRC channel, someone (Allan Foster) pointed me to com.iplanet.am.cookie.c66Encode configuration variable. You can enable it in the console, Configuration, servers and sites, click on default paramaters, and then advanced tab. Set the value to true, and voila! Everything is now working good!

Categories: IAM, SSO Tags:

OpenSSO, OpenID and Yubikey, the perfect personal SSO: cheap, and secure

August 3rd, 2009 1 comment

As a new owner of an yubikey, I was looking the best way to integrate it with the web application I already use. While there is already an available OpenID provider which support Yubikey authentication, I prefer to manage my own system, using OpenSSO for sure ūüôā
Yubikey
First, let me introduce the yubikey. This USB key act as an OTP (One Time Password) device, each time you press the button, the key compute a new password. This pasword must be verify, in the case of Yubikey, this is done by query a Webservices on a yubico (the company) server. Yubikey offers a lot of advantages than others classical OTP devices, including:

  • The yubikey is see as an USB keyboard (class HID), no driver required!
  • No battery, more longlife than anothers devices
  • Very cheap, around 20 euros (ordered by 10, from France), transport and taxes included

So, why choose OpenSSO? For few years know, OpenSSO provides an extension to act as an OpenID provider, and an authentication class is available for the Yubikey.

OpenSSO OpenID Yubikey

References:

Categories: IAM, Security, Sysadmin Tags: , ,

Petite surprise en LDAP: last successful bind

April 28th, 2009 2 comments

Un rapide poste qui je l’esp√®re fera suite √† d’autres pour exposer une petite surprise que j’ai eu avec LDAP (enfin de mani√®re plus pr√©cises avec les serveurs). Lors d’un projet pour mon nouvel employeur, on me demanda d’installer un OpenSSO pour authentifier des utilisateurs et obtenir leurs attributs LDAP. Bon, jusqu’ici rien d’anormal. N√©anmoins, dans les attributs utilisateurs, il est demand√© un attribut fournissant la date de la derni√®re connexion d’un utilisateur (en pratique la date d’un dernier bind op√©r√© avec succ√®s). Sur le moment, je n’ai pas percut√©. Ce n’est qu’au moment de revenir sur mon poste, et par acquis de conscience, que j’ai commenc√© √† me renseigner.

Et quelle ne fut pas ma surprise lorsque je me suis rendu que :

  • OpenSSO ne le permet pas de base. Apr√®s une rapide rechercher, il semblerait qu’une mani√®re simple (c’est tout relatif) est d’√©crire une classe (Java) qui sera ex√©cut√©e apr√®s une authentification utilisateur.
  • Active Directory semble fournir cette fonctionnalit√© de base (via l’attribut lastlogon)
  • Sun Directory Directory Server Entreprise Edition (DSEE pour faire court) ne semble √† priori pas le supporter dans toutes ses versions (>= 6.2 de m√©moire, √† prendre avec grande pr√©caution) (tests en court)
  • OpenDS le supporte (tests en court)
  • Sun iPlanet 5.x ne le supporte tout simplement pas
  • Je n’ai pas regard√© pour les autres serveurs, si jamais vous avez des retours dessus, je suis preneur.

√Čvidemment, je vous laisse deviner quel serveur j’utilise. Donc, je me suis retrouv√© √† √©crire un plugin (en C) pour iPlanet, j’avoue que cela est assez int√©ressant (enfin il y a bien pire comme t√Ęche :). Je vais mettre √† disposition le code de ce plugin d’ici quelques jours, m√™me si je doute qu’en Avril 2009 cela int√©resse encore beaucoup de gens !

Pour information, pour obtenir cette fonctionnalit√© avec DSEE et OpenDS, il faut utiliser les password policies, et n’activer que la partie concern√©e. Cela va mettre √† jour le champ ds-pwp-last-login-time (au moins vrai pour OpenDS).

N√©annmoins, j’avoue que je suis assez surpris que cela ne soit pas de base, partout, dans tous les serveurs LDAP. Certes, cela demande un minimum de performances suppl√©mentaires. En effet, cela provoque une √©criture (op√©ration consid√©r√©e comme lente sur un annuaire LDAP) √† chaque op√©ration d’authentification r√©ussie (mais on pourrait imaginer de vouloir l’√©quivalent pour un last failure). Mais au point de vue gestion d’identit√©, c’est quand m√™me une information qui peut √™tre tr√®s int√©ressante. Au hasard, sur un portail public, d’obtenir rapidement, et simplement, la liste des utilisateurs qui ne se sont pas connect√©s depuis une ann√©e.

Categories: IAM, Security, Sysadmin Tags: ,

Article sur la mise en place de l’authentification X509 avec OpenSSO et EJBCA

April 3rd, 2009 No comments

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 !

Categories: IAM, PKI, Security, SSO Tags: ,

OpenSSO and EJBCA: Use Case

January 1st, 2009 8 comments

EJBCA logo

EJBCA

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.

OpenSSO logo

OpenSSO

How to try this image?

  • Download the archive
  • Extract it
  • Open the vmx file using VMWare
  • 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:
# rm /etc/udev/rules.d/z25_persistent-net.rules
# modprobe -r pcnet32
# sleep 1
# modprobe pcnet32
# /etc/init.d/networking restart
  • Execute the command ifconfig eth and identity the IP address of the image
    Check IP address
  • 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

Categories: PKI, Security, SSO Tags: ,

OpenSSO, EJBCA : Cas d’utilisation

December 26th, 2008 1 comment

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 !

Categories: PKI, SSO Tags: ,

OpenSSO : support de cours disponible

August 19th, 2008 No comments

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 !

Au programme :

  • D√©ploiement multi¬† instances
  • Failover des sessions
  • Installation d’un agent Web
  • Installation d’un agent J2EE

Un document de 128 pages ! Cela se passe ici.

Categories: SSO, Sysadmin Tags:

Sauvegarde de l’instance OpenDS embarqu√© dans OpenSSO

July 29th, 2008 No comments

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 :

% ./bin/export-ldif –includeBranch ‘dc=opensso,dc=java,dc=net’ –backendID userRoot –ldiffile backups/20080727.ldif

Categories: SSO, Sysadmin Tags: ,

OpenSSO: installation et configuration de l’agentsample

July 28th, 2008 3 comments

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 ūüôā¬†

Categories: IAM, SSO Tags:

OpenSSO : Configuration de l’authentification par certificat

July 7th, 2008 1 comment

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) :

# keytool -import -alias <nomAC> -trustcacerts -keystore cacerts.jks

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)

# openssl x509 -in <certificat utiliser.pem) -noout -subject

subject= /UID=asyd/CN=Bruno Bonfils/O=asyd dot net/C=FR

    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.

    Categories: SSO Tags: