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 :

Cryptage RSA sous unix


Sujet :

Sécurité Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Cryptage RSA sous unix
    Bonjour,
    Je voudrais crypté tous les fichiers d'un dossier avec l'algorithme de cryptage RSA et ensuite les envoyé par mail.
    Pour cela j'ai codé un programme java qui liste tous les fichiers d'un dossier et qui les crypte en utilisant un certificat de securité portant l'extension .pfx et pour finir qui les envoi par mail en piece jointe.

    Sous windows tout est OK, le souci est que lorsque je veux utiliser ce meme java sous unix (avec le meme certificat de sécurité) cela ne marche pas.

    Voici l'erreur :
    java.lang.IllegalArgumentException: not an RSA key!
    at org.bouncycastle.jce.provider.JCERSACipher.engineGetKeySize(UnknownSource)
    at javax.crypto.Cipher.init(Unknown Source)


    J'aurais voulu savoir si unix était capable de gérer de tel certificat de cryptage. Si oui y a t-il des modifications à faire au niveau de unix ou du programme java ?

    Merci de votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,
    Oui Unix peut largement gérer de tels objets...
    Tu as généré ton certificat avec quoi ?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Salut, ce n'est pas moi qui l'a généré.
    C'est une société extérieure qui me l'a donné pour que je leur envoi des mails cryptés qu'ils pourront décrypter avec leur clé privée.
    Après avoir un peu cherché sur le net je me demandais si openssl n'était pas nécessaire sur la machine UNIX?
    Merci

  4. #4
    Invité
    Invité(e)
    Par défaut
    Attends je comprends pas tout :
    Tu veux crypter des emails ? Pour cela pas besoin de clef privée (donc de fichier pfx), le certificat suffit avec la clef publique.
    Ensuite quel est ton code Java qui génère cette erreur ?

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    voici mon code java :

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    public  static boolean	init(String certificat)
    {
    	try {
    		ks = KeyStore.getInstance("PKCS12");
    		// Password pour le fichier *.pfx
    		password = "*****".toCharArray();
    		ks.load(new FileInputStream(certificat), password);
    		} 
    	catch (Exception e) 
    		{
    		System.out.println("Erreur: fichier "+certificat+" n'est pas un fichier pkcs#12 valide ou passphrase incorrect");
    		return false;
    		}
     
    	//RECUPERATION DU COUPLE CLE PRIVEE/PUBLIQUE ET DU CERTIFICAT PUBLIQUE
    	try {
    		Enumeration en = ks.aliases();
    		String ALIAS = "";
    		Vector vectaliases = new Vector();
     
    		while (en.hasMoreElements())
    		vectaliases.add(en.nextElement());
    		String[] aliases = (String []) (vectaliases.toArray(new String[0]));
    		for (int i = 0; i < aliases.length; i++)
    			if (ks.isKeyEntry(aliases[i]))
    			{
    				ALIAS = aliases[i];
    				break;
    			}
    		privatekey 	= (PrivateKey)ks.getKey(ALIAS, password);
    		cert 		= (X509Certificate)ks.getCertificate(ALIAS);
    		publickey 	= ks.getCertificate(ALIAS).getPublicKey();
     
    	}catch (Exception e) 
    	{
    		e.printStackTrace();
     
    	}	
    return true;
    }
     
     
    public  static void 	cryptage(String fichierACrypte, String fichierCrypte)
    {
    	try 
    	{
    		 // Chargement du fichier à chiffrer
    		byte[] buffer = ouvrirFichier(fichierACrypte);
    	    Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding", "BC");
     
            //------------------------------------------------------------------//
            // Chiffrement du document
            //------------------------------------------------------------------//
     
            // publickey est la cle publique du destinataire
            cipher.init(Cipher.ENCRYPT_MODE, publickey, new SecureRandom("aaa".getBytes()));
    	    int blockSize = cipher.getBlockSize();
    	    int outputSize = cipher.getOutputSize(buffer.length);
    	    int leavedSize = buffer.length % blockSize;
    	    int blocksSize = leavedSize != 0 ?
    	    buffer.length / blockSize + 1 : buffer.length / blockSize;
    	    byte[] raw = new byte[outputSize * blocksSize];
    	    int i = 0;
     
            while (buffer.length - i * blockSize > 0)
            {
                    if (buffer.length - i * blockSize > blockSize)
                        cipher.doFinal(buffer, i * blockSize, blockSize, raw, i * outputSize);
                    else
                        cipher.doFinal(buffer, i * blockSize, buffer.length - i * blockSize, raw, i * outputSize);
                    i++;
            }       
            sauverFichier(fichierCrypte, raw);
            System.out.println("Fichier "+fichierACrypte+" crypte avec succes");
    		}
    	catch (Exception e) 
    	{
           e.printStackTrace();
    	}		
    }
    la société m'a envoyé un fichier pfx et un p7b je le récupère ou le certificat? Je suis désolé je débute dans ce domaine et c'est très flou pour moi.

    Merci pour ton aide.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Alors pour résumer :
    • Ton fichier pfx doit contenir le certificat plus la clef privée, protégée par le mot de passe : cette clef te sert à décrypter
    • Ton fichier p7b, comme ca je peux psa dire exactement mais surement une chaine de certificats permettant d'authentifier ton certificat par la CA qui l'a émit (cherche un peu sur le net pour avoir des infos là dessus)

    Ensuite, ton erreur arrive à quelle ligne ?
    Si tu veux seulement crypter des messages comme j'ai dit ci dessus, tu n'as besoin que de la clef publique, je ne comprends pas pourquoi l'entreüprise t'a envoyé sa clef privée, c'est assez risqué comme comportement...
    Finalement, je ne comprends pas ton problème, tu dois faire une appli pour crypter des textes avec rsa ou juste envoyer des emails cryptés ? Dans le deuxième cas, pas besoin de coder une appli pour faire ca les clients mails (tel thunderbird) gèrent très bien les certificats tout seul, et peuvent crypter les emails sans intervention d'un programme extérieur.
    Pour ce qui est de openssl, c'est nécessaire pour générer des certificats par exemple pas pour les utiliser

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Mon problème est que je vais devoir automatisé le cryptage de fichier et les envoyé ensuite par mail automatiquement. Il y a bcp bcp... de messages a crypter et envoyer par jour. C'est pour cela que je passe par un java.

    Mon erreur arrive au moment où il essai d'ouvrir le fichier pfx.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    	try {
    		ks = KeyStore.getInstance("PKCS12");
    		// Password pour le fichier *.pfx
    		password = "*****".toCharArray();
    		ks.load(new FileInputStream(certificat), password);
    		} 
    	catch (Exception e) 
    		{
    		System.out.println("Erreur: fichier "+certificat+" n'est pas un fichier pkcs#12 valide ou passphrase incorrect");
    		return false;
    		}
    Apres avoir relu le mail qu'il m'ont envoyé voici ce que je comprends :

    - fichier pfx --> c'est ma clé privée pour que je puisse faire des tests (ce certificat je l'ai installé sur thunderbird).

    - fichier p7b --> c'est ma clé publique pour crypté des messages de tests que je pourrai décrypté avec ma clé privée (fichier pfx si j'ai bien compris...)

    Il m'ont également fourni leur clé publique pour qu'une fois que j'ai fini mes tests je puisse mettre en production avec leur clé publique.

    Le problème que j'ai c'est que je n'arrive pas a crypté avec le fichier p7b, en revanche avec le pfx ca crypte.

    Est ce mon code qui pose problème? ou alors leurs certificats qui n'est pas bien généré ou trop vieux...?? Ou pourrai me procurer des certificats gratuitement pour faire d'autres tests?

    Merci.

Discussions similaires

  1. Cryptage rsa sous Delphi
    Par hocine77 dans le forum Langage
    Réponses: 5
    Dernier message: 27/12/2010, 19h30
  2. cryptage script shell sous unix
    Par dimitris dans le forum Autres systèmes
    Réponses: 0
    Dernier message: 13/07/2010, 09h01
  3. Cryptage RSA sous unix
    Par tom5040 dans le forum Sécurité
    Réponses: 3
    Dernier message: 03/09/2008, 12h43
  4. cryptage avec RSA sous visual C++
    Par ryoussef19 dans le forum VC++ .NET
    Réponses: 17
    Dernier message: 30/05/2007, 11h10
  5. cryptage d'un fichier sous UNIX
    Par medora dans le forum Linux
    Réponses: 5
    Dernier message: 13/04/2007, 12h39

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