jan 23 2008

Cryptographie java, les certificats X509

Tag: Développement, J2EEkarl verger @ 21:41

Bon pour ce soir on vas voir la création de certificats X509 et leur sauvegarde dans un keystore.

wikipedia : Un certificat électronique est une carte d’identité numérique dont l’objet est d’identifier une entité physique ou non-physique. Le certificat numérique ou électronique est un lien entre l’entité physique et l’entité numérique (Virtuel). L’autorité de certification fait foi de tiers de confiance et atteste du lien entre l’identité physique et l’entité numérique. Le standard le plus utilisé pour la création des certificats numérique est le X.509.

Il existe 4 types de certificats en fonction du niveau de sécurité:

  • classe 1: adresse e-mail du demandeur requise;
  • classe 2: preuve de l’identité requise (photocopie de carte d’identité par exemple);
  • classe 3: présentation physique du demandeur obligatoire.
  • classe 3+: identique à la classe 3, mais le certificat est stocké sur un support physique (clé USB à puce, ou carte à puce; exclut donc les certificats logiciels)

Tel qu’on l’utilise en cryptographie et en sécurité informatique, un certificat électronique est un bloc de données contenant, dans un format spécifié, les parties suivantes :

  • un numéro de série;
  • l’identification de l’algorithme de signature;
  • la désignation de l’autorité de certification émettrice du certificat;
  • la période de validité au-delà de laquelle il sera suspendu ou révoqué;
  • le nom du titulaire de la clé publique;
  • l’identification de l’algorithme de chiffrement et la valeur de la clé publique constitué d’une paire de clés asymétriques (comme par exemple RSA);
  • des informations complémentaires optionnelles;
  • l’identification de l’algorithme de signature et la valeur de la signature numérique.

Voila pour la définition, il faut savoir qu’au sein du kesytore nous pouvons stocker un certificat avec sa clef publique et y associer sa clef privé afin de pouvoir l’exploiter dans le cadre de la signature électronique ou de l’encryption de documents.

Il est important de noter aussi qu’en fonction de l’usage prévu pour un certificat (horodatage, signature de code, authentification server, email etc…) il est nécessaire de le spécifier, voir exemple 4 de cet article -> création d’un certificat permettant la création de jeton d’horodatage.

Nous allons donc créer notre paire de clefs public / privé, notre certificat et l’ajouter à notre keystore

1 Création de la paire de clefs

    public static KeyPair generateKeyPair() throws CryptoException
    {
        try {
            KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
            SecureRandom rand = SecureRandom.getInstance("SHA1PRNG");
            keyPairGen.initialize(2048, rand);
            KeyPair keyPair = keyPairGen.generateKeyPair();

            return keyPair;
        }
        catch (NoSuchAlgorithmException ex) {
            throw new CryptoException("Probleme lors de la création de la pair de clef : "+ex.getMessage());
        }
        catch (InvalidParameterException ex) {
            throw new CryptoException("Probleme lors de la création de la pair de clef : "+ex.getMessage());
        }
    }

2 Creation du certificat de type X509 V1

Continue reading “Cryptographie java, les certificats X509″


jan 22 2008

Cryptographie java, les keystores

Tag: Développement, J2EEkarl verger @ 21:37

Bien hier nous avons vu comment générer des clef symétrique AES et des clefs asymétriques RSA et comment les utiliser pour réaliser un cryptage décryptage avec ces clefs.

Ce soir nous allons aborder la gestion des keystores (création, sauvegarde, chargement, ajout de certificat), les keystore servent à stocker vos certificats et clefs, pour l’exemple on ne traite que les keystores PKCS#12

wikipedia : Les PKCS (Public Key Cryptographic Standards), ou standards de cryptographie à clé publique, sont un ensemble de spécifications conçues par les laboratoires RSA en Californie. La société RSA Security est spécialisée dans les solutions de sécurité cryptographiques. Elle est également propriétaire de licences d’exploitations de plusieurs algorithmes (dont RSA avant l’expiration de son brevet le 21 septembre 2000). C’est pour ces raisons que la société a développé et promu les PKCS, permettant l’implantation des techniques de cryptographie à clé publique.

La société RSA Security n’est pas un organisme de normalisation et contrôle complètement l’élaboration et l’évolution des PKCS. L’appellation des PKCS comme standards au sens strict est donc abusive. Répondant à un réel besoin technique, les PKCS ont néanmoins été très largement adoptés par le milieu informatique. Le groupe de travail PKIX de l’IETF a depuis reformulé certains des PKCS dans des RFC, les standards Internet. L’abus de langage confondant le PKCS au lieu de la RFC correspondante est très répandu.

CS#12 1.0 Standard de syntaxe d’information personnelle Définit un format de fichier généralement utilisé pour stocker la clé privée et le certificat de clé publique correspondant en les protégeant par un mot de passe.

1 Créer un keystore de manière programmatique

    public static KeyStore createKeyStorePKCS12() throws CryptoException{
        try {
            KeyStore keyStore = null;
            keyStore = KeyStore.getInstance("PKCS12", "BC");
            keyStore.load(null, null);
            return keyStore;
        } catch (IOException ex) {
            Logger.getLogger(KeyStoreUtil.class.getName()).log(Level.SEVERE, null, ex);
            throw new CryptoException("Problème IO : "+ex.getMessage());
        } catch (NoSuchAlgorithmException ex) {
            Logger.getLogger(KeyStoreUtil.class.getName()).log(Level.SEVERE, null, ex);
            throw new CryptoException("Problème d'algo : "+ex.getMessage());
        } catch (CertificateException ex) {
            Logger.getLogger(KeyStoreUtil.class.getName()).log(Level.SEVERE, null, ex);
            throw new CryptoException("Problème de certificat : "+ex.getMessage());
        } catch (KeyStoreException ex) {
            Logger.getLogger(KeyStoreUtil.class.getName()).log(Level.SEVERE, null, ex);
            throw new CryptoException("Problème sur le keystore : "+ex.getMessage());
        } catch (NoSuchProviderException ex) {
            Logger.getLogger(KeyStoreUtil.class.getName()).log(Level.SEVERE, null, ex);
            throw new CryptoException("Problème de provider : "+ex.getMessage());
        }
    }

Continue reading “Cryptographie java, les keystores”


jan 21 2008

Cryptographie java, clef AES et RSA

Tag: Développement, J2EEkarl verger @ 21:29

Bon allez, une petite série dans la continuité des articles sur la signature électronique, on vas faire un petit tours rapide de la crypto symétrique et asymétrique avec java.

1 Encryption avec une clef symétrique AES

wikipédia : Le standard de chiffrement avancé (Advanced Encryption Standard ou AES) est un algorithme de chiffrement symétrique, choisi en octobre 2000 par le NIST pour être le nouveau standard de chiffrement pour les organisations du gouvernement des États-Unis.

générer une clef symétrique AES

    public static SecretKey generateKeyAES128() throws NoSuchAlgorithmException {
        KeyGenerator keyGen = KeyGenerator.getInstance("AES");
        keyGen.init(128);
        return keyGen.generateKey();
    }

puis crypter avec cette clef secrète AES

    public static byte[] cryptWithAES(byte[] plaintext, byte[] bytesKey) throws CryptoException {
        try {
            Cipher cipher = Cipher.getInstance("AES");
            cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(bytesKey, "AES"));
            byte[] encrypted = cipher.doFinal(plaintext);
            return encrypted;
        } catch (NoSuchAlgorithmException ex) {
            throw new CryptoException(ex.getMessage());
        } catch (NoSuchPaddingException ex) {
            throw new CryptoException(ex.getMessage());
        } catch (InvalidKeyException ex) {
            throw new CryptoException(ex.getMessage());
        } catch (IllegalBlockSizeException ex) {
            throw new CryptoException(ex.getMessage());
        } catch (BadPaddingException ex) {
            throw new CryptoException(ex.getMessage());
        }
    }

Continue reading “Cryptographie java, clef AES et RSA”


jan 16 2008

Signature électronique Horodatage BouncyCastle 2

Tag: Architecture, Développementkarl verger @ 23:36

Bon voila la suite du 1er article , nous allons donc

  1. Créer un keystore contenant les clefs privés et public

  2. Création d’un jeton d’horodatage

  3. Signature électronique d’un document (PKCS#7)

  4. Vérification d’une signature

1 Créer un keystore contenant les clefs privés et public

dans un premier temps vous devez télécharger un petit utilitaire qui vous simplifiera la vie pour vos test KeyTool IUI Plus.

Une fois cela fait vous lancer l’outil en executant run.sh.

signature-electronique-horodatage-bouncycastle_html_m6ed7e5e1.jpg

 

Continue reading “Signature électronique Horodatage BouncyCastle 2″


jan 15 2008

Signature électronique Horodatage BouncyCastle 1

Tag: Architecture, Développement, J2EEkarl verger @ 22:47

Cet article à pour objectif de fournir l’information nécessaire à la compréhension de la signature électronique et l’horodatage ainsi que la mise en application de ces concepts et normes en java grace à l’API de BouncyCastle.

le tutoriel se découpe en 2 articles

Article 1

  1. rappel sur le jeton d’horodatage et serveur de temps

  2. rappel sur la signature électronique

     

Article 2

  1. Créer un keystore contenant les clefs privés et public

  2. Création d’un jeton d’horodatage

  3. Signature électronique d’un document (PKCS#7)

  4. Vérification d’une signature

 

1 rappel sur le jeton d’horodatage et serveur de temps

 

Le tiers horodateur construit une réponse contenant les données de la requête et en particulier

l’empreinte, et y rajoute une marque de temps ainsi que des données additionnelles dont :

 

l’identité du tiers horodateur et la politique sous laquelle il a produit le jeton. Le jeton est

contenu dans la réponse sous la forme d’une structure CMS (Cryptographic Message Syntax)

signée. Le jeton d’horodatage permet de fournir la preuve d’existence de données à un instant

dans le temps. Le but est de faire le lien entre une chaîne de caractères et une marque de

temps :

Continue reading “Signature électronique Horodatage BouncyCastle 1″


jan 15 2008

Toutes mes excuses

Tag: Non classékarl verger @ 8:36

Hier soir mon serveur a rencontré quelques problème, le site était donc indisponible.

Le problème est résolu et ne devrais pas se représenter.

Désolé pour toutes les personnes qui souhaitait se connecter.

Bon web a vous.

 


jan 12 2008

SPRING JMS ActiveMQ

Tag: Développement, J2EE, Springkarl verger @ 17:36

L’objectif de cet article est de vous permettre d’appréhender les bases de la mise en place de JMS avec SPRING et activeMQ.

 

Le projet de test que vous allez réaliser est téléchargeable à la fin de cet article, ce projet un projet maven donc pour le build : mvn package .Maven s’occupera de télécharger les dépendances pour vous .

 

Spring est le meta-framework du moment, il intègre les concepts comme AOP IOC MVC et fourni un nombre considérable d’helpers pour l’intégrations de technologies, nous l’utiliserons afin de bénéficier des templates jms qu’il fournis.

 

Java Message Service (JMS) permet d’envoyer et de recevoir des messages de manière asynchrone entre applications ou composants Java. Un client peut également recevoir des messages de façon synchrone dans le mode de communication point à point.

 

ActiveMQ d’Apache est le plus populaire et puissant des Message Broker open source, il permet une intégration aisé et multi languages.

 

  1. Installation activeMQ

    tout d’abord vous devez télécharger activeMQ ici , une fois cela fait vous le décompacter

    tar zxvf apache-activemq-5.0.0.tar.gz

    puis vous vous positionner dans le répertoire correspondant

    cd apache-activemq-5.0.0/bin

et enfin vous lancer le script d’execution

activemq > activemq-log.txt

a ce stade activeMQ est prêt à etre utilisé. Vous pouvez vous connecter à la console pour vérifier

à l’adresse http://0.0.0.0:8161/admin/

activeMQ est désormais accessible sur le port 61616 pour vos applications java.

Continue reading “SPRING JMS ActiveMQ”


jan 08 2008

Hibernate Search Lucene Spring Maven

Tag: Architecture, Développement, J2EE, Springkarl verger @ 23:21

L’objectif de cet article est de vous permettre d’appréhender la mise en place d’une indexation avec le moteur Lucene en s’aidant des frameworks java du moment sur le marché à savoir Hibernate et Spring.

Le projet de test que vous allez réaliser est téléchargeable à la fin de cet article, ce projet un projet maven donc pour le build : mvn package .Maven s’occupera de télécharger les dépendances pour vous .

Hibernate Search vous permet de profiter du moteur d’indexation Lucene pour indexer les objets de votre domaine métiers.

Lucene est basé sur une technologie d’indexation des contenus textuels similaire à Google ou d’autres moteurs de recherche. D’ailleurs, un sous-projet de Lucene, Nutch, offre les fonctionnalités de Google et permet de faire de la recherche sur des millions de pages web.

Lucene offre des performances inégalées et est scalable quelle que soit la volumétrie en terme de contenu ou de nombre de recherches.

Spring quand à lui est le meta-framework du moment, il intègre les concepts comme AOP IOC MVC et fourni un nombre considérable d’helpers pour l’intégrations de technologies, nous l’utiliserons dans notre projet pour manager hibernate et les transactions

L’intégration d’hibernate search est assez aisé et ce fait par le biais des annotations et les events hibernate.

Les annotations permettent de définir les propriétés que vous voulez indexer ainsi que leur stratégies d’indexations.

Les events s’occupent pour vous de synchroniser les indexes Lucene avec vos Entités hibernate

 

L'image “http://www.hibernate.org/hib_docs/search/reference/en/shared/images/lucene-backend.png” ne peut être affichée car elle contient des erreurs.

voilà après ce rapide tour d’horizon, nous allons mettre en place hibernate search pour un projet de test

Continue reading “Hibernate Search Lucene Spring Maven”


jan 06 2008

Installer un cluster GlassFish avec Session FailOver

Tag: Architecture, Infrastructure, J2EEkarl verger @ 22:17

Nous allons installer et configurer pas à pas un cluster GlassFish avec session failover

télécharger le jar d’installation sur :

http://download.java.net/javaee5/v2ur1/promoted/Linux/glassfish-installer-v2ur1-b09d-linux.jar,

 

Installer le serveur

lancer l’installation

% java -Xmx256m -jar filename.jar

suivre les instructions

 

Se positionner dans le répertoire qui à été créé par l’installeur

% cd glassfish

donner les droits d’exécution au scripts ant intégré

% chmod -R +x lib/ant/bin

editer le fichier setup-cluster.xml pour le configurer selon vos besoins puis lancer le setup.

% lib/ant/bin/ant -f setup-cluster.xml pour construire un serveur glasfissh prenant en compte les clusters

 

<glassfish-install-dir>/bin/asadmin start-domain –user admin <domainname> pour lancer le serveur d’application sur le domaine que vous avez configurer .

 

Créer les agents

1-<glassfish-install-dir>/bin/asadmin create-node-agent <nodeagentname> –host <hostname> –port <portnumber> pour créer un nouvel agent

2-<glassfish-install-dir>/bin/asadmin start-node-agent <nodeagentname> pour démarrer votre nouvel agent

 

 

Créer le cluster

1-Créer un cluster

<glassfish-install-dir>/bin/asadmin create-cluster –user admin <clustername>

2-créer une instance rataché au cluster que vous venez de créer

<glassfish-install-dir>/bin/asadmin create-instance –user admin –nodeagent <nodeagentname> –cluster <clustername> <instancename1>

3-créer une seconde instance rataché au cluster que vous venez de créer

<glassfish-install-dir>/bin/asadmin create-instance –user admin –nodeagent <nodeagentname> –cluster <clustername> <instancename2>

4-démarrer le cluster

<glassfish-install-dir>/bin/asadmin start-cluster <clustername>

 

Nous avons créé le cluster en ligne de commande mais il est tout à fait possible de le créer via l’interface d’admin

 

createclusterviaguiadmin.jpg

Déployer une application sur le cluster

Continue reading “Installer un cluster GlassFish avec Session FailOver”


jan 05 2008

Transactions et SPRING Framework

Tag: Architecture, Développement, J2EE, Springkarl verger @ 23:20

L’objectif de cet article est de faire quelques rappels interressants sur les transactions et leur comportements avec SPRING.

Définition d’une Transaction : Une transaction regroupe une série d’opérations dans un tout indivisible. La transaction n’est validé que si chacune des taches unitaires qu’elle regroupent se sont déroulées correctement (COMMIT). Dans le cas contraire (si une des taches unitaires échoue) l’ensemble des données traitées retrouvent leur état initial(ROLBACK).

Une transaction doit respecter les quatre contraintes suivantes dites ACID :

  • Atomicité : une transaction doit s’effectuer en tout ou rien ;

  • Cohérence : la cohérence des données doit être assurée dans tous les cas, même dans les cas d’erreur où le système doit revenir au précédent état cohérent ;

  • Isolation : la transaction va travailler dans un mode isolé où elle seule peut voir les données qu’elle est en train de modifier, cela en attente d’un nouveau point de synchronisation ; le système garantit aux autres transactions, exécutées en parallèle sur le même système, une visibilité sur les données antérieures ;

  • Durabilité : lorsque la transaction est achevée, le système est dans un état stable durable, soit à l’issu d’une modification transactionnelle réussie, soit à l’issue d’un échec qui se solde par le retour à l’état stable antérieur.

Overview d’une transaction applicative

les transactions spring permettent d’encapsuler plusieurs appels de méthodes sur différentes couches et d’en assurer le caractère ACID.

overview-Transaction

Continue reading “Transactions et SPRING Framework”


Page suivante »