Archive

Archive for the ‘PKI’ Category

EJBCA Créer un certificat administrateur en ligne de commande

May 4th, 2011 No comments

De retour chez un client après quelques années d’absences, je me retrouve avec un certificat d’administrateur expiré sur la PKI de test. Voici la procédure de création d’un nouveau certificat, le tout en ligne de commande, forcément :

./bin/ejbca.sh ra adduser bbonfils00 foo123 "cn=Bruno Bonfils,UID=bbonfils,O=Customer,C=FR" NULL AdminCA1 bruno@opencsi.com 1 P12 ENDUSER EE_PKI_ADMINISTRATOR
./bin/ejbca.sh ra setclearpwd bbonfils00 foo123
./bin/ejbca.sh batch

Bien entendu il faut que le certificat corresponde au profil. Si besoin, vous devez pouvoir utiliser le profil EMPTY en ne spécifiant uniquement le CN. Il faut maintenant obtenir le numéro de série du certificat.

./bin/ejbca.sh ra getusercert bbonfils00

Copier / coller le certificat dans un certificat, puis extraire le numéro de série à l’aide de la commande OpenSSL :

openssl x509 -in /tmp/bbonfils0.pem -noout -serial
serial=4AEDB10E68DC69B6

Et finalement, identifier un groupe d’administrateur, puis rajouter l’administrateur dans ce groupe :

./bin/ejbca.sh admins listgroups
Using JBoss JNDI provider...
PKI CA Administrators (1 admin)
Super Administrator Group (2 admins)
./bin/ejbca.sh admins addadmin "Super Administrator Group" "AdminCA" "WITHSERIALNUMBER" EQUALCASEINS 4AEDB10E68DC69B6

Categories: PKI Tags:

IAM track at LSM

May 4th, 2009 No comments

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.

Categories: IAM, PKI, Social, SSO, 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 6 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

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

Nouveautés EJBCA 3.8

October 28th, 2008 2 comments

Avec un peu d’avance (la version stable d’EJBCA 3.8 n’étant encore pas finalisée) voici un bref apercu des nouvelles fonctionnalités, dont certaines très attendues par des heureux possesseurs de matériel un peu sensible, genre les ILOs des HPs (ils se reconnaitront).

  • Possibilité de définir l’ordre du DN (CN=blog.asyd.net,O=asyd dot net,C=FR ou C=FR,O=asyd dot net,CN=blog.asyd.net) dans le profil du certificat. Avant cette version il était nécessaire de créer une autorité spécifiquement pour ces besoins. Cela permet de générer des certificats pour des équipements acceptant uniquement un ordre particulier.
  • Des changements assez profonds sur la notion d’administrateur. Il ne sera désormais plus nécessaire de cocher la case « Administrateur » dans le profil d’entité. De plus, des administrateurs peuvent utiliser des certificats issus de différentes AC (dont une AC non gérée par EJBCA) pour s’authentifier dans un groupe d’administrateur. On notera également quelques améliorations au niveau ergonomie dans la partie gestion des groupes administrateurs.
  • Une nouvelle fonctionnalité très intéressante pour ceux qui utilisent les WebServices d’EJBCA est apparue. Elle permet l’aggrégation (merge) du DN fourni lors de l’appel au WebService editUser à celui défini dans le profil d’entité. Imaginons par exemple un profil d’entité définissant des attributs du DN tel que « O=asyd dot net,C=FR », si la fonctionnalité de mergeDN est activé, il suffira de passer le DN « CN=Bruno Bonfils » à la méthode SOAP editUser pour obtenir le DN « CN=Bruno Bonfils, O=asyd dot net,C=FR », cela évite de maintenir la méthode de construction du DN au niveau du client.
  • Une autre fonctionnalié, peut être moins visible, mais quelques fois tout aussi importante, est la capacité d’ajouter un administrateur par la ligne de commande, via le numéro de série du certificat.

Categories: PKI Tags:

Imaginons… un navigateur xhtml + xades

September 9th, 2008 No comments

Premier post dans cette catégorie, je me tente à un nouvel exercice. Travaillant le domaine de la PKI (identification, signature numérique, chiffrement, etc.) et devenant de plus adepte de service en ligne, je me pose beaucoup de questions sur la confidentialité et l’intégrité des données que je consulte à travers différents portails.

Imaginons un utilisateur (en l’occurence moi) d’un portail type netvibes. Ce dernier propose un widget gestion de tâches, idée très intéressante. Néanmoins, dans un souci de confidentialité, je n’ai guère envie que ces tâches soient stockées en clair quelque part (typiquement chez l’hébergeur du portail). Je souhaiterais donc être en mesure de pouvoir créer une tâche, tout en assurant la confidentialité via un mécanisme de chiffrement. Ca tombe très bien, j’ai déjà un certificat de chiffrement pour mon courrier électronique.

Je pousse quelques secondes ma réflexion, une page web (en utilisant du xhtml) n’est rien d’autre qu’un document XML valide. Heureuse coincidence, il existe un schéma XML, à savoir XAdES (surcouche à xmldsig) qui permet de chiffrer et/ou signer tout ou une partie d’un document XML (bon, je résume, ce schéma apporte également bien d’autre chose).

Donc, imaginons un navigateur qui en plus d’implémenter les fonctions classiques, sait interpréter la norme XAdES, en relation avec des certificats clients, aussi bien logiciel que matériel (pour information Firefox est déjà capable d’utiliser ces deux supports). Cela permettrait donc de disposer d’une portion (un div !) – dans mon cas une tåche – chiffrée dont seule la clé privée de mon certificat à moi permet la lecture de cette tâche.

Voilà un premier exemple d’utilisation de mon idée du soir, mais il y en a bien plus, comme par exemple la possibilité de signer les donnés d’un formulaire, etc.

N’hésitez pas à commenter si vous avez des questions, c’est juste une idée qui m’est passée, et la mettre (rapidement) à plat n’est pas forcément un exercice facile !

Note pour les spécialistes, le chiffrement n’est pas assuré directement par XAdES, mais c’est pour rester simple.

Categories: Business tools, PKI, Security, Signature Tags:

IDM, EJBCA, SPML, et Groovy, ca y est !

August 26th, 2008 No comments

J’en rêvais, alors je l’ai fais ! Mon idée était de disposer d’un ensemble d’outils pour générer facilement des requêtes SPML, j’ai donc créer une petite bibliothèque Java, et écris quelques scripts groovy associés, en pratique cela donne :

import net.asyd.iam.spml.AddRequest
 
AddRequest request = new AddRequest()
 
request.init("http://localhost:8080/SPMLServer/openspml2")
request.createPsoId("easyspmlDemo")
request.addAttribute("emailAddress", "bbonfils@gmail.com")
request.proceed()
request.dumpResponse()

Comme vous pouvez le constater, cela deviens très simple. De plus, dans ma lancé, je me suis dis pourquoi ne pas créer une servlet recevant des requêtes SPML pour les traduires dans des WebServices EJBCA. C’est maintenant chose faite. Bien que je n’implémente actuellement que la méthode addRequest, cela me permet de provisionner des entités depuis un producteur SPML, comme par exemple Sun Identity Manager. La “traduction” entre SPML et la couche EJBCA se fais au travers d’un script groovy (et oui, encore du groovy, groovy c’est le bien !), de la manière suivante :

import java.util.HashMap
import net.asyd.iam.FinalAddEntity
import org.ejbca.core.protocol.ws.UserDataVOWS
 
public class FinalAddEntitySample implements FinalAddEntity {
 
    def id
    def attributes
    def buffer
    def ejbcaEntity
 
    public void init(String id, HashMap attributes, UserDataVOWS ejbcaEntity) {
        this.id = id
        this.attributes = attributes
        this.ejbcaEntity = ejbcaEntity
    }
 
    public void preprocess() {
        buffer = ",UID=" + id + ",OU=staff,O=asyd dot net,C=FR"
    }
 
    public String getSubjectDN() {
        return "CN=" + id + buffer
    }
 
    public boolean proceed() {
        ejbcaEntity.setUsername(id)
        ejbcaEntity.setEmail(attributes.get("emailAddress"))
        ejbcaEntity.setSubjectDN(getSubjectDN())
 
        ejbcaEntity.setCaName("DemoCA")
        ejbcaEntity.setCertificateProfileName("ENDUSER")
        ejbcaEntity.setEndEntityProfileName("EE_SPML_USER")
        ejbcaEntity.setTokenType("P12")
        ejbcaEntity.setSendNotification(true)
 
        return true
    }
}

Plus d’information disponible sur devel.asyd.net :

Actuellement le code est plutôt un POC que production ready, mais avec un peu de chance cela ne saurait tarder, et après tout ca permet déjà de faire des choses sympas !

Categories: IAM, PKI Tags: ,

Extraire les certificats utilisateurs d’un fichier p7b

July 24th, 2008 No comments

Sous Windows, lorsque vous exporter un certificat utilisateur (depuis le magasin windows, bien évidemment); il est enregistré dans un fichier p7b. Pour information, un fichier p7b est un fichier CMS, décris par la RFC 2797, c’est à dire un conteneur de donnéees qui peuvent être signées ou chiffrées (dans le cas présent, le certificat est signé). Bref, j’ai eu besoin programmatiquement de pouvoir être en mesure d’extraire le certificat final d’un p7b, sachant que le fichier peut contenir plus d’un certificat (typiquement windows inclus la chaîne de certification), et j’avoue que bouncycastle n’est pas forcément simple d’approche, c’est pourquoi je mets aujourd’hui le code en dispo ! Enjoy

Categories: Java, PKI Tags:

Configurer apache/mod_jk pour EJBCA

June 16th, 2008 No comments

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

Categories: PKI, Sysadmin Tags: