IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Sécurité Java Discussion :

BouncyCastle CMS et S/MIME


Sujet :

Sécurité Java

  1. #1
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut BouncyCastle CMS et S/MIME
    Bonsoir,

    Pour les besoins d'un projet, j'ai besoin d'encrypter un message MIME dans un CMS, ce CMS devra contenir mon message MIME, encrypté avec un clé (la mienne), et ma clé, encryptée avec la clé publique de mon destinataire. je dois ensuite envoyer ce CMS via un message S/MIME.

    Mes questions sont :

    Dans les tutoriaux de developpez.com (la) j'ai trouvé un exemple (§5.2) pour gérer cela, visiblement ca fait tout comme je veux...
    donc mon message MIME, je l'exporte dans un fichier temporaire, puis je le lis (pour faire comme dans l'exemple, lire un fichier)
    au moment d'encrypter mon fichier, cette ligne génère une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String algorithm = CMSEnvelopedDataGenerator.DES_EDE3_CBC;
    CMSEnvelopedData envData = generator.generate(new CMSProcessableByteArray(buffer), algorithm, "BC");
    l'erreur est du type :
    java.security.NoSuchProviderException: no such provider: BC
    at sun.security.jca.GetInstance.getService(GetInstance.java:66)
    at javax.crypto.SunJCE_b.a(DashoA12275)
    at javax.crypto.KeyGenerator.getInstance(DashoA12275)
    at org.bouncycastle.cms.CMSEnvelopedHelper.createKeyGenerator(Unknown Source)
    at org.bouncycastle.cms.CMSEnvelopedHelper.createSymmetricKeyGenerator(Unknown Source)
    at org.bouncycastle.cms.CMSEnvelopedDataGenerator.generate(Unknown Source)
    Enfin, pour envoyer ce type de message, CMS via S/MIME, BouncyCastle c'est le mieux, si oui, vous n'auriez pas un exemple pour le S/MIME ?


    Merci d'avance

  2. #2
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    J'ajoute une réponse, pour dire que je n'ai toujours pas la mienne

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Piolet Voir le message
    J'ajoute une réponse, pour dire que je n'ai toujours pas la mienne
    Salut,
    J'ai jamais testé mais à tout hasard : tu as bien ajouté les bibliothèques aux bons endroits comme indiqué dans le tuto ?

  4. #4
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    Citation Envoyé par George7 Voir le message
    Salut,
    J'ai jamais testé mais à tout hasard : tu as bien ajouté les bibliothèques aux bons endroits comme indiqué dans le tuto ?
    bah disons que j'ai installé les jar indiqué dans le tuto et même d'autres (car j'ai cherché un peu sur le net avant de poster, et visiblement pour les providers, il en faudrait des specifiques)
    mais meme comme ca, ca ne passe pas...et oui, les jar sont bien installé, car reconnu à la compilation et à l'execution, mais le "BC", lui, est une chaîne de caractères libre, et il ne la reconnait pas comme provider, alors que dans tous les exemples que je trouve, elle revient à chaque fois.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Hmmmmm en effet bizarre, je peux pas trop te dire comme ca là... Désolé

  6. #6
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    Citation Envoyé par George7 Voir le message
    Hmmmmm en effet bizarre, je peux pas trop te dire comme ca là... Désolé
    pas grave au moins t'auras essayé (comme moi )

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Piolet Voir le message
    pas grave au moins t'auras essayé (comme moi )
    Hésite pas à donner la solution ici si tu la trouves, ca m'intéresse aussi

  8. #8
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    Citation Envoyé par George7 Voir le message
    Hésite pas à donner la solution ici si tu la trouves, ca m'intéresse aussi
    tu as le même problème ?

    t'as essayé ?

  9. #9
    Invité
    Invité(e)
    Par défaut
    Non j'ai pas essayé mais ca m'intéresse de savoir comment on utilise cette bibliothèque

  10. #10
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    Citation Envoyé par George7 Voir le message
    Non j'ai pas essayé mais ca m'intéresse de savoir comment on utilise cette bibliothèque
    bah comme dans le tutorial a priori, à la rigueur, tu peux essayer, tu trouveras ptet la solution

  11. #11
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    J'ai trouvé la solution pour le provider, j'ai rajouté un truc du style (j'ai plus le code sous les yeux)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.security.Provider.add(new BouncyCastleProvider())
    avec ca, nickel il trouve le provider, donc ne génère plus l'erreur NoSuchProvider...

    mais maintenant il en génère une en rapport avec la taille de la clé qui n'est pas bonne

    pour être plus précis...je cherche a faire la norme IRIS (pour la télétransmission sécu) et cette norme demande de récupérer un certificat, ca ok pas de soucis de mettre un fichier (contenant les infos) dans un message type MIME, d'encapsuler ce MIME dans un CMS et de l'envoyer via un message SMIME

    et donc je dois crypter le message MIME avec une clé (a moi) générer avec l'algo DESedeCBC (si ma mémoire est bonne)
    encapsuler cette clé avec la clé du certificat et envoyer le CMS ainsi généréer dans le SMIME à une adresse donnée


    donc la dessus...bha je bloque, si y a un pro qui s'y connait je suis GRAVE preneur

  12. #12
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    Alors je reviens un peu argumenter mon problème

    tous les exemples que je trouve sur le net pour envoyer un mail "crypté" se basent sur le même principe, à savoir, la création d'un certificat pour l'origine du message, et un autre pour le destinataire, enfin si je comprends bien..

    ensuite ils créent le message via les classes BouncyCastle et le crypt, mais je ne suis pas foutu de comprendre le code pour savoir quel certificat sert au cryptage.

    Moi, dans ma problématique, j'ai récupéré un certificate (sur un LDAP, ce certificat est correct)...

    et je dois, de mon coté, créer une clé privé encrypté mon message avec cette clé privé, puis encrypter ma clé avec celle du certificat que j'ai pu récupérer...
    puis envoyer le tout a mon destinataire...

    et la...je patauge, vu que tous les exemples se servent de 2 certificats etc...alors que moi j'ai besoin d'une clé privé

    (en gros le principe que je veux réaliser est le suivant : http://www-igm.univ-mlv.fr/~dr/XPOSE2004/saime/#, dans la section Mécanismes de cryptage, paragraphe 3)

    j'ai réussi a jouer les exemples fourni...j'ai même réussi a intégrer mon certificat dans ces exemples, mais je ne sais pas lequel des 2 certificats remplacer par le mien, je ne sais pas non plus comment indiquer l'algorithme pour la clé privé (DESede/CBC/NoPadding)

    bref...je patauge (déjà dit ) un peu

  13. #13
    Membre chevronné Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Par défaut
    T'as regardé du coté de java.security?

  14. #14
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    Citation Envoyé par KindPlayer Voir le message
    T'as regardé du coté de java.security?
    c'est à dire ?

    parce que oui, forcément j'ai regardé de ce coté la, mais après pour l'appliquer a mon problème...bah oui...j'ai juste regardé, parce que j'ai rien pané du tout

  15. #15
    Membre chevronné Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Par défaut
    Comme tu travailles avec le provider bouncycastle tu peux utiliser l'api pour faire ton chiffrement. Pour choisir l'algo de chiffrement, tu as la classe Cipher si j'ai bien regardé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Cipher cipher = Cipher.getInstance("nom de l'algo");
    Un lien avec un petit exemple
    http://www.mobilefish.com/download/b...icExample.java
    Il y a aussi un petit tuto bouncycastle sur developpez
    Pour la liste des algos regarde sur la doc de bouncycastle. Après à toi de voir dans le certificat quel est le type de bi-clef utilisé (typiquement RSA).

  16. #16
    Membre chevronné Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471

  17. #17
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    Citation Envoyé par KindPlayer Voir le message
    Comme tu travailles avec le provider bouncycastle tu peux utiliser l'api pour faire ton chiffrement. Pour choisir l'algo de chiffrement, tu as la classe Cipher si j'ai bien regardé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Cipher cipher = Cipher.getInstance("nom de l'algo");
    Un lien avec un petit exemple
    http://www.mobilefish.com/download/b...icExample.java
    Il y a aussi un petit tuto bouncycastle sur developpez
    Pour la liste des algos regarde sur la doc de bouncycastle. Après à toi de voir dans le certificat quel est le type de bi-clef utilisé (typiquement RSA).
    tout ca c'est bon...enfin Cypher et tout le toutim...
    le tuto BouncyCastle, j'ai regardé aussi...il parle meme des CMS, ce dont j'ai visiblement besoin

    (en gros je dois construire un fichier texte, le mettre dans un message Mime, ce Mime, je dois le mettre dans un CMS pour l'encrypter avec ma clé privée encryptée, grâce au certificat, puis envoyé ce CMS via un message SMIME)

    mais bon la, après...tout ce que je trouve sur le net...c'est un peu Beyrouth, donc la...j'ai plus besoin d'un exemple concret, genre qq1 qui l'a deja fait ou alors un truc pas a pas

    pour rappel, c'est la télétransmission pour la sécu que je cherche a faire.

    mais merci de ta participation

  18. #18
    Membre chevronné Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Par défaut
    Qu'as tu réussi a faire exactement jusqu'à présent? Tu as créé ton mime et tu l'as enveloppé dans un CMS (je sais pas ce que c'est CMS). As tu réussi à l'encrypter? A tu un exemple de code que tu as déja écrit?

  19. #19
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    Citation Envoyé par KindPlayer Voir le message
    Qu'as tu réussi a faire exactement jusqu'à présent? Tu as créé ton mime et tu l'as enveloppé dans un CMS (je sais pas ce que c'est CMS). As tu réussi à l'encrypter? A tu un exemple de code que tu as déja écrit?
    alors ce que j'ai pu faire...c'est
    faire un mime avec mon fichier, ca ok, c'est bateau.

    Ensuite le CMS (c'est dans le tuto du BouncyCastle), j'ai essayé de le faire, mais la...il faut que le je lui file une InputStream, et je n'ai pas de moyen de conversion de mon MIME vers une InputStream.

    donc du coup, j'ai zappé, et je me suis dirigié directement vers les SMIME et la...j'ai pas réussi a faire grand chose, juste reprendre les différents codes trouvés sur le net (ou dans les exemples fournies dans le src.zip de BouncyCastle) et essayer de les faire tourner.

    Hier j'ai bien réussi a m'envoyé un mail, mais, après c'est ptet moi qui n'y connait rien, il était parfaitement lisible, juste un fichier .pk7 en pièce jointe.

    et la, j'ai pas mon code sous la main, donc je ne peux pas le mettre...

  20. #20
    Membre chevronné Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Par défaut
    Tu peux instantier ton wrapper CMS avec un tableau de bytes en principe. Un InputStream de toute façon c'est juste une classe abstraite, qui peut etre dérivé sous forme d'un tableau de bytes (ByteArrayInputStream). Ton message Mime ca correspond a une instance de quelle classe bouncycastle. Je pense qu'il doit yavoir une méthode pour convertir en tableau de byte auquel cas tu aurais un point d'entrée pour instancier un InputStream.
    Regarde ici aussi, ca correspond peut etre a ce que tu veux
    http://bouncycastle.gva.es/www.bounc...ataParser.html
    C'est sur que ca serait plus simple si tu pouvais poster un bout de code

Discussions similaires

  1. Cryptographie avec BouncyCastle (CMS)
    Par layloun dans le forum Général Java
    Réponses: 0
    Dernier message: 15/04/2015, 10h36
  2. Quel est le meilleur script PHP de portail (CMS) ?
    Par Lana.Bauer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 187
    Dernier message: 18/10/2012, 07h45
  3. [BouncyCastle] PrivateKey pour déchiffrer un CMS
    Par Piolet dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 01/08/2009, 00h44
  4. [struts] déterminer le type Mime d'un fichier
    Par k4eve dans le forum Struts 1
    Réponses: 4
    Dernier message: 14/06/2004, 10h28
  5. utilisation d'objets ADO pour CMS sur POSTGRESQL7.3.2
    Par turbok dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 10/10/2003, 09h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo