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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    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
    Je reviens à la charge avec mon problème
    et je vais mettre ce dont j'ai réellement besoin, tel que c'est décrit dans le document officiel :

    1. Le fichier est encapsulé dans une entité MIME; L’entité MIME ne doit contenir qu’un et un seul fichier.
    2. L’entité MIME est chiffrée conformément à la RFC 2630; elle doit être chiffrée une seule fois et ne doit pas être signée. L’entité MIME chiffrée ainsi que la clé de chiffrement chiffrée sont regroupées dans un objet CMS.

    3. L’objet CMS est encapsulé dans une entité S/MIME; cette entité S/MIME peut avoir une structure « multipart » ou « single part ».
    4. L’entité S/MIME est attachée à un message SMTP. Le message SMTP ne doit contenir qu’une et une seule entité S/MIME.

    voila...alors je me dis, présenté comme ca, c'est plus clair
    je dispose de l'entité MIMEMessage (object javamail) ca pas de soucis, et d'un certificat (Object X509Certificat de java, pas un fichier, ptet qu'a terme il faudra que je le stock dans un fichier pour éviter de le télécharger à chaque envoie, mais pour l'instant, un objet)

    Comment puis-je faire pour réaliser l'étape numéro 2 ?
    BouncyCastle a l'air de proposer les bonnes classes, mais...j'ai pas l'air de comprendre le mécanisme

    autre précision importante qui peut aider :

    Le chiffrement de transport devant être utilisé possède les caractéristiques suivantes:
    - le chiffrement des messages s’effectue en utilisant l’algorithme 3-DES en mode CBC (clé de session de 128 bits);
    - la clé de session est chiffrée avec la clé publique RSA du destinataire du message (clé publique de 1024 bits);
    - les clés publiques sont certifiées, les certificats sont au format X509 V3.
    a vot' bon coeur m'sieur dame

  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
    Alors je reviens a la charge avec mon problème
    il semblerait que j'ai trouvé le code nécessaire à ce dont j'ai besoin, le code serait, hypothétiquement, le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public MimeBodyPart getEncrypt(MimeMessage content, X509Certificate cert) {
       SMIMEEnvelopedGenerator  fact = new SMIMEEnvelopedGenerator();
       fact.addKeyTransRecipient(cert);
       MimeBodyPart smime = fact.generate(content, SMIMEEnvelopedGenerator.DES_EDE3_CBC , "BC");
       return smime;
    }
    la dessus aucun soucis visiblement.
    le hic c'est qu'en suite j'ajoute ce BodyPart dans un multipart que je joint a un MimeMessage que j'envoie.
    Et lors de cet envoi, je me retrouver avec des exceptions de levées qui me disent que la "key size is inappropriate for this algorithm"

    alors j'explique un peu plus. Dans mon certificate, il y a une clé publique RSA de 1024 bits, et celle de DES_EDE3_CBC devrait être logiquement de 128, d'après les specs que j'ai.

    mais visiblement, en laissant la taille par défaut, au niveau du generator, j'ai cette exception...

    quelqu'un voit-il une solution ?
    pour info, c'est java 1.5 (sous mac), mais l'appli finale doit tourner sur n'importe quelle plateforme (avec java 1.5)

  9. #9
    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
    l'erreur exact est celle-ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    javax.mail.MessagingException: IOException while sending message;
      nested exception is:
    	org.bouncycastle.mail.smime.SMIMEEnvelopedGenerator$WrappingIOException: org.bouncycastle.cms.CMSException: key inappropriate for algorithm.
    	at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:676)
    	at javax.mail.Transport.send0(Transport.java:189)
    	at javax.mail.Transport.send(Transport.java:118)
    	at MyClass.send(IrisStream.java:143)
    	at MyMain.main(Main.java:46)
    Caused by: org.bouncycastle.mail.smime.SMIMEEnvelopedGenerator$WrappingIOException: org.bouncycastle.cms.CMSException: key inappropriate for algorithm.
    	at org.bouncycastle.mail.smime.SMIMEEnvelopedGenerator$ContentEncryptor.write(Unknown Source)
    	at org.bouncycastle.mail.smime.handlers.PKCS7ContentHandler.writeTo(Unknown Source)
    	at javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:839)
    	at javax.activation.DataHandler.writeTo(DataHandler.java:295)
    	at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1403)
    	at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:874)
    	at javax.mail.internet.MimeMultipart.writeTo(MimeMultipart.java:444)
    	at com.sun.mail.handlers.multipart_mixed.writeTo(multipart_mixed.java:102)
    	at javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:839)
    	at javax.activation.DataHandler.writeTo(DataHandler.java:295)
    	at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1403)
    	at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1745)
    	at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:636)
    	... 4 more
    Caused by: org.bouncycastle.cms.CMSException: key inappropriate for algorithm.
    	at org.bouncycastle.cms.CMSEnvelopedDataStreamGenerator.open(Unknown Source)
    	at org.bouncycastle.cms.CMSEnvelopedDataStreamGenerator.open(Unknown Source)
    	... 17 more
    Caused by: java.security.InvalidKeyException: Illegal key size or default parameters
    	at javax.crypto.Cipher.a(DashoA12275)
    	at javax.crypto.Cipher.init(DashoA12275)
    	at org.bouncycastle.cms.CMSEnvelopedGenerator$RecipientInf.toRecipientInfo(Unknown Source)
    	... 19 more

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