OpenSSO : Configuration de l’authentification par certificat

July 7th, 2008

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.

    RMLL, J-0

    July 1st, 2008

    Et voilà, les RMLL ont commencés, et j’irais même jusqu’à dire sur les chapeaux de roues ! Déjà les premières conférences, des salles remplies, et surtout… beaucoup de chaleur ! Beaucoup de monde pour ce premier jour, cela s’annonce très bien !

    xwiki, groovy, velocity: c’est magique !

    June 25th, 2008

    Il y a peu de temps, j’ai mentionné la joie de ma découverte de xwiki. Quelques jours plus tard, et surtout après quelques heures de geekage intensif (et de lecture de documentation de velocity, hibernate, groovy, xwiki…) je viens de réussir à faire ce que je voulais ! À savoir avoir une macro permettant depuis mon xwiki d’aller récupérer des informations depuis un bugzilla à partir du numéro du bug. Concrêtement, dans ma page, j’utilise le code suivant :

    #showBug(”123″)

    pour obtenir le résultat suivant :

    • #226: Add a property to deactivate email verification
    • #231: Implement the Request Certificate uc

    la couleur est dépendante du statut du bug. Voilà, c’est peut être pas grand chose, mais je suis vraiment impressionné par la rapiditié de développement que fournit xwiki au travers de velocity/groovy. Note : le code est disponible en attachement, néanmois je sais que ce n’est pas très optimisé, je vais le faire évoluer.

    OpenSSO et le SaaS

    June 23rd, 2008

    Voici une petite démo conviviale des possibilités de fédération d’identité proposées par OpenSSO, en interaction avec les applications google et salesforces. La fédération d’identité sera t’elle vraiment utilisée un jour ?

    xwiki, loin d’être un simple wiki

    June 16th, 2008

     

    Bon, j’avoue, ce post est plus une pénitence pour moi qu’une véritable révélation. Il se trouve que pour mon site devel.asyd.net, qui hébergera à terme quelques projets persos (et éventuellement d’autres), je cherchais un outil pouvant plus ou moins faire office de forge. Gforge, bah, pas de ça chez moi, on est plus dans les années 1990. J’aurais bien voulu tester libresource pour de vrai, mais pour je ne sais quelle obscure raison, je n’ai jamais vraiment réussi la phase complète d’installation (bon, j’avoue aussi ne pas avoir vraiment insisté). Après quelques utilisations (mais très simplissimes) de xwiki, je m’étais dis que cela pourrait être l’occasion de tester vraiment xwiki.

    La chance (et la motivation ?) aidant, j’ai (finalement) découvert la vraie puissance de xwiki. Notamment par la gestion des macros.

    Mon idée étant de faire une mini forge très simple, je voulais juste un ensemble de projets (qui se traduit par la notion de spaces dans xwiki) avec des droits spécifiques, et un ensemble de pages respectant une charte, comme par exemple la page d’accueil d’un projet. Et pif paf, sur quoi je tombe ? Des macros, me permettant de créer très facilement un rendu pré-défini. Cela me permet donc par exemple de créer ce genre de page, identique à chaque projet, en une seule ligne (oui, la gestion du nom de projet est automatique, via la notion de spaces). En une seule édition, je modifie l’ensemble des (futurs) projets hébergés. Et du coup, je commence maintenant à imaginer la foule des possibilités offertes par les macros (et je n’ai pas encore commencer à regarder la gestion des formulaires ni des gabarits.) Plus sérieusement, je commence seulement à appréhender la souplesse et la puissance de xwiki. Les macros peuvent par exemple être écrites en velocity, mais également en groovy. On peut même créer ses propres plugins directement en java…

    Configurer apache/mod_jk pour EJBCA

    June 16th, 2008

    Parce que la configuration n’est pas forcément évidente, et aussi pour ne pas la chercher à chaque fois, voici un rapide howto pour configurer apache en front d’un EJBCA avec authentification des administrateurs.

    Configurer le fichier workers.properties, puis ajouter la section suivante dans la confguration de votre VirtualHost :

    DocumentRoot /var/www/
    SSLEngine On
    SSLCACertificateFile /etc/apache2/apache.pem
    SSLCertificateFile /etc/apache2/apache.pem
    SSLCertificateKeyFile /etc/apache2/apache.pem
    SSLVerifyClient optional
    JkMount /ejbca/* jboss

    SSLOptions +StdEnvVars +ExportCertData
    JkLogLevel error
    JkExtractSSL on
    JkHTTPSIndicator HTTPS
    JkSESSIONIndicator SSL_SESSION_ID
    JkCIPHERIndicator SSL_CIPHER
    JkCERTSIndicator SSL_CLIENT_CERT

    Du nouveau dans les portails

    June 10th, 2008

    Les portails semblent (a juste titre selon moi) redevenir un peu sur la scene. Notamment avec l’annonce d’OpenPortal, un rapprochement (pour ma part assez flou pour l’instant) avec Sun et la liberalisation de Sun Portal Server 7, et de liferay, un acteur connu des portails. De plus, l’arrivee d’une nouvelle norme (JSR-286) va permettre des evolutions tres interessantes. Vous connaissiez les IPC du monde systeme (Inter Process Communication) ? Et bien maintenant vous connaissez les IPC, (Inter Porlets Communication), qui permet a differentes portlets de s’echanger des donnees, ce qui peut donner des choses tres interessantes. Notez qu’il existe deja un bundle OpenPortal, nommer WebSynergy, tres simple a deployer (un simple unzip + une commande unix), disponible ici. Cependant, je n’ai rien vu de bien extraordinaire pour l’instant, cela ressemble juste un Liferay customise et deploye dans un glassfish (v3 !), mais je suis un peu mauvaise langue, le projet OpenPortal est tres tres recent, laissons lui le temps :)

    On peut egalement citer PortletContainer, qui pourrais se definir comme un micro conteneur de portlet, en effet, peu voire pas de notion d’administration, on peut juste deployer des portlets, mais il fais quelques centains de KB, pas plus. Il peut etre donc etre interessant dans certaines utilisations (console d’administration ?)

    Donc tous a vos IDEs (NetBeans bien sur), telecharger le plugin PortalPack, regarder les demos, notamment celle-ci (exemple d’IPC), et enjoy !

    inkscape: nouvelle (?) fonctionnalité pour aligner plusieurs objets

    June 9th, 2008

    Si comme moi vous utilisez (par défaut ou par choix) inkscape pour créer vos schémas sous linux, vous serez sans doute content d’apprendre qu’il existe désormais une fonctionnalité permettant d’aligner un ensemble d’objets sur plusieurs lignes/colonnes. Pour cela, sélectionner l’ensemble des objets, puis cliquer sur le bouton Objet, puis Aligner sur une grille. Il suffit désormais de choisir le nombre de lignes et de colonnes, et voilà !

    Unconference : une nouvelle approche

    May 5th, 2008

    Ayant été convié aux unconference glassfish, j’ai trouvé l’approche très intéressante. En quoi cela consiste ? Et bien, le concept est simple, mais applicable pour un nombre de personne relativement restreint. En premier lieu (généralement quelques jours avant), chaque personne présente (aussi bien orateurs que participants) citent des thèmes qu’ils souhaitent aborder. Se dégage alors un certain nombre de sujets fédérateurs. Une fois les grandes lignes des sujets établies, l’ensemble des personnes présentes se regroupent autour d’une table, et commencent alors une discussion très ouverte, sans réel but, mais au final cela donne un échange généralement très enrichissant, aussi bien au niveau technique que métier et business. Je pense que je vais essayer ce principe lors d’une prochaine réunion de l’association GUSES :)

    Java One, J-2 - Premières impressions

    May 4th, 2008

    Me voici enfin arrivé à San Francisco, après presque 24h de transport (entre le moment où je suis parti de chez moi à Paris et où je suis arrivé à l’hôtel) et quelques péripéties. Par exemple l’avion (ligne Paris - Minneapolis) qui - à peine les roues posées au sol - redécolle, ça fais toujours bizarre. Ensuite, j’ai voulu acheter des cigarettes, et on m’a demandé ma carte d’identité, je ne pensais pas faire si jeune ! :) Et pour finir, au moment de prendre le deuxième vol (Minneapolis - San Francisco) juste au moment de décoller le pilote nous signale un problème d’ordinateur (c’est super rassurant !) et du coup, retour à la case départ, pour finalement décoller 1h après, dans le même avion. (je dis ça, mais je comprends tout à fait qu’ils ne prennent pas le moindre risque).

    Bref, me voilà dans mon hôtel, je reviens d’une petite ballade de 2 heures dans les rues, c’est quand même assez sympa, mais très … carré.  D’ailleurs, je  ne sais pas si tous les gens sont comme cas, mais à peine sorti de l’hôtel, je regardais mon plan pour savoir par où me balader,  et un américain m’a demandé ce que je cherchais. On a discuté quelques minutes et m’a indiqué quelques endroits bien sympathique. Plus tard, je suis passé devant le moscone center (le lieu où il y a Java One) c’est assez impressionnant, je n’ose imaginer de l’intérieur..

    Voilà ! à très bientôt pour la suite des mes aventures!