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 :

Client/serveur et SLL


Sujet :

Sécurité Java

  1. #1
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Points : 104
    Points
    104
    Par défaut Client/serveur et SLL
    Bonjour à tous

    J'ai suivi un petit tutoriel sur l'utilisation des socket pour effectuer des échanges de données entre un client et un serveur.

    Pour des échanges basiques, cela a l'air de bien fonctionner

    Maintenant je souhaiterai sécuriser ces échanges part SSL. mais la je coince dès le départ pour la création de mon serveur.

    pour information, j'utilise l'API standart.

    voici le petit bout de code :
    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
     
    import javax.net.ssl.SSLServerSocket;
    import javax.net.ssl.SSLServerSocketFactory;
    import javax.net.ssl.SSLSocket;
     
     
    public class SSLServeur {
    	public static final int port = 8080;
     
     
        public static void main(String[] args) {
        	SSLServerSocketFactory sslfact = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
        	try {
    			SSLServerSocket sslssoc = (SSLServerSocket) sslfact.createServerSocket(port);
    			SSLSocket socket = (SSLSocket) sslssoc.accept();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}  	
       }
    }
    en suivant le tuto, il a fallu générer un certificat réaliser avec l'outil keytool

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    keytool -genkey -keystore keys -keyalg RSA
    j'ai rentré les informations demandées, le fichier est correctement créer.

    développant sous eclipse j'ai mis ce fichier à la racine de mon projet

    lors de l'exécution je me retrouve avec l'exception suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    javax.net.ssl.SSLException: No available certificate or key corresponds to the SSL cipher suites which are enabled.
    	at com.sun.net.ssl.internal.ssl.SSLServerSocketImpl.checkEnabledSuites(Unknown Source)
    	at com.sun.net.ssl.internal.ssl.SSLServerSocketImpl.accept(Unknown Source)
    	at SSLServeur.main(SSLServeur.java:15)

    Par la suite, j'ai essayé de réaliser les même opération dans le terminal pour tout réaliser à la main.

    j'ai placer mon fichier "Keys" dans le répertoire de mes sources java, je me suis placé dans ce répertoire, un petit ensuite j'ai tenter d'exécuter de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java -Djavax.net.ssl.keyStore=keys -Djavax.net.ssl.keyStorePassword=123456 SSLServeur
    et la je me prend une autre exception :
    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
     
    java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com
    .sun.net.ssl.internal.ssl.DefaultSSLContextImpl)
            at javax.net.ssl.DefaultSSLServerSocketFactory.throwException(Unknown Source)
            at javax.net.ssl.DefaultSSLServerSocketFactory.createServerSocket(Unknown Source)
            at SSLServeur.main(SSLServeur.java:14)
    Caused by: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.in
    ternal.ssl.DefaultSSLContextImpl)
            at java.security.Provider$Service.newInstance(Unknown Source)
            at sun.security.jca.GetInstance.getInstance(Unknown Source)
            at sun.security.jca.GetInstance.getInstance(Unknown Source)
            at javax.net.ssl.SSLContext.getInstance(Unknown Source)
            at javax.net.ssl.SSLContext.getDefault(Unknown Source)
            at javax.net.ssl.SSLServerSocketFactory.getDefault(Unknown Source)
            at SSLServeur.main(SSLServeur.java:12)
    Caused by: java.security.UnrecoverableKeyException: Password must not be null
            at sun.security.provider.JavaKeyStore.engineGetKey(Unknown Source)
            at sun.security.provider.JavaKeyStore$JKS.engineGetKey(Unknown Source)
            at java.security.KeyStore.getKey(Unknown Source)
            at com.sun.net.ssl.internal.ssl.SunX509KeyManagerImpl.<init>(Unknown Source)
            at com.sun.net.ssl.internal.ssl.KeyManagerFactoryImpl$SunX509.engineInit(Unknown Source)
            at javax.net.ssl.KeyManagerFactory.init(Unknown Source)
            at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.getDefaultKeyManager(Unknown Source)
            at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.<init>(Unknown Source)
            at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
            at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
            at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
            at java.lang.reflect.Constructor.newInstance(Unknown Source)
            at java.lang.Class.newInstance0(Unknown Source)
            at java.lang.Class.newInstance(Unknown Source)
            ... 7 more
    les exception semble m'insulter à propos du fichier généré avec keytool ?

    enfin la je suis largué !

    Si une bonne âme trouve une solution à ce problème, je l'en remercie d'avance

    d'après le tuto, il n'y a pas grand chose d'autre a faire !

  2. #2
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Points : 104
    Points
    104
    Par défaut
    Bon ce matin j'ai tout repris à zéro, j'ai recréer mes fichier java, recompilé re exécuté et la tout marche parfaitement bien j'arrive à faire la conexion au client et à envoyer des données

    je passe donc en résolu

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    [QUOTE=deglingo592003;4536644]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    javax.net.ssl.SSLException: No available certificate or key corresponds to the SSL cipher suites which are enabled.
    	at com.sun.net.ssl.internal.ssl.SSLServerSocketImpl.checkEnabledSuites(Unknown Source)
    	at com.sun.net.ssl.internal.ssl.SSLServerSocketImpl.accept(Unknown Source)
    	at SSLServeur.main(SSLServeur.java:15)

    je rencontre le même probleme (même erreur) en voulant réaliser un basique échange entre un client/serveur avec Eclipse

    je pense que je ne place pas au bon endroit le keytool et ne l'utilise pas bien non plus avec Eclipse
    comment faire pour qu'Eclipse prenne bien en compte le keytool lors de la compilation du code?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Salut,

    Tu as exactement le code montré ci dessus ?
    Dans eclipse lorsque tu lances ton application, tu as passé les arguments nécessaires pour donner le chemin vers ton keystore et le mot de passe ? Tu as bien généré un keystore ?
    Donne nous un peu de code et la façon dont tu lances ton appli (les options), on pourra surement t'en dire plus long

    A plus

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    le message d'erreur est identique
    javax.net.ssl.SSLException: No available certificate or key corresponds to the SSL cipher suites which are enabled.
    at com.sun.net.ssl.internal.ssl.SSLServerSocketImpl.checkEnabledSuites(Unknown Source)
    at com.sun.net.ssl.internal.ssl.SSLServerSocketImpl.accept(Unknown Source)
    at EchoServer.main(EchoServer.java:20)
    mais effectivement dans eclipse je ne donne pas les paramètres nécessaires pour le chemin vers le keystore ainsi que le mot de passe lorsque je fais un RUN AS sur le echoserveur.java

    comment puis je procéder pour lui passer ses paramètres?

    le keystore est bien généré et je l'ai ajouté à la racine de mon projet sous Eclipse à savoir :
    - Echoclient.java
    - Echoserveur.java
    - keystore.jks

    Code Serveur
    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
     
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.BufferedReader;
    import java.io.IOException;
     
    import javax.net.ssl.SSLSocket;
    import javax.net.ssl.SSLServerSocket;
    import javax.net.ssl.SSLServerSocketFactory;
     
    public class EchoServer
    {
      public
      static void main(String [] arstring)
      {
        try
        {
          SSLServerSocketFactory sslserversocketfactory =(SSLServerSocketFactory)SSLServerSocketFactory.getDefault();
          SSLServerSocket sslserversocket =(SSLServerSocket)sslserversocketfactory.createServerSocket(9999);
          SSLSocket sslsocket = (SSLSocket)sslserversocket.accept();
     
          InputStream inputstream = sslsocket.getInputStream();
          InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
          BufferedReader bufferedreader = new BufferedReader(inputstreamreader);
     
          String string = null;
          while ((string = bufferedreader.readLine()) != null)
          {
            System.out.println(string);
            System.out.flush();
          }
        }
        catch (Exception exception)
        {
          exception.printStackTrace();
        }
      }
    }
    Code Client

    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
     
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
     
    import javax.net.ssl.SSLSocket;
    import javax.net.ssl.SSLSocketFactory;
     
    public
    class EchoClient
    {
      public static void main(String [] arstring)
      {
        try
        {
          SSLSocketFactory sslsocketfactory = (SSLSocketFactory)SSLSocketFactory.getDefault();
          SSLSocket sslsocket = (SSLSocket)sslsocketfactory.createSocket("localhost", 9999);
     
          InputStream inputstream = System.in;
          InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
          BufferedReader bufferedreader = new BufferedReader(inputstreamreader);
     
          OutputStream outputstream = sslsocket.getOutputStream();
          OutputStreamWriter outputstreamwriter = new OutputStreamWriter(outputstream);
          BufferedWriter bufferedwriter = new BufferedWriter(outputstreamwriter);
     
          String string = null;
          while ((string = bufferedreader.readLine()) != null)
          {
            bufferedwriter.write(string + '\n');
            bufferedwriter.flush();
          }
        }
        catch (Exception exception)
        {
          exception.printStackTrace();
        }
      }
    }
    Le code a été pris d'Internet (peut-etre sur developpez.com d'ailleurs)

  6. #6
    Invité
    Invité(e)
    Par défaut
    Alors pour ajouter des arguments au lancement d'une application dans eclipse c'est simple : http://help.eclipse.org/helios/index...cutionArgs.htm

    Pour donner une propriété (-D...) c'est dans la case "VM Arguments" qu'il faut les écrire.

    A plus

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    j'ai ajouté les arguments suivants :
    -Djavax.net.ssl.keyStore=monPROPRE_KEYSTORE -Djavax.net.ssl.keyStorePassword=mon_MOT_DE_PASSE EchoServer

    J'obtiens l'erreur : "java.lang.NoClassDefFoundError: EchoServer"

    cela suppose que je compile une première fois "à la main" EchoServeur.java avec par exemple javac EchoServer.java
    et ensuite avec les options -Djavax ... dans Eclipse?

  8. #8
    Invité
    Invité(e)
    Par défaut
    Si j'ai bien compris, tu travailles dans eclipse, et eclipse a un compilateur intégré, tu n'as pas besoin de lancer javac à la main.
    Vérifie que ton projet est bien compilé automatiquement (menu Project > Build Automatically)

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    exactement je travaille sous eclipse (Lomboz) donc le javac me semble inutile
    cependant, après avoir ajouté les arguments -Djavax.net.ssl.keyStore=monPROPRE_KEYSTORE -Djavax.net.ssl.keyStorePassword=mon_MOT_DE_PASSE EchoServer

    dans la VM Arguments (clic droit sur le fichier EchoServer.java --> Run As -->Open Run Dialog), j'ai l'erreur

    java.lang.NoClassDefFoundError: EchoServer
    Caused by: java.lang.ClassNotFoundException: EchoServer
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    Exception in thread "main"
    comme dit précédemment donc je pense que les paramètres VM arguments ne sont pas correctes?

  10. #10
    Invité
    Invité(e)
    Par défaut
    Ah ok je vois !
    Tu n'as pas besoin de passer la classe à lancer dans les paramètres, elle doit être renseignée dans la configuration habituelle c'est tout.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Je me suis aperçu de ça ! merci pour l'info
    j'ai encore des erreurs malheureusement

    Caused by: java.security.PrivilegedActionException: java.io.FileNotFoundException: mySrvKeystore (Le fichier spécifié est introuvable)
    Pourtant il apparait bien dans les sources de mon projet Eclipse

    y'a t'il d'autres paramètres à ajouter?

    en compilant avec ms dos le projet se lance bien mais avec eclipse pas si simple

    merci et désolé pour toutes ces questions

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Plus de précisions sur les erreurs rencontrées

    keyStore is : mySrvKeystore
    keyStore type is : jks
    keyStore provider is :
    default context init failed: java.security.PrivilegedActionException: java.io.FileNotFoundException: mySrvKeystore (Le fichier spécifié est introuvable)

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    ça ne dit rien à personne?

  14. #14
    Invité
    Invité(e)
    Par défaut
    Eh bien L'exception dit que le fichier n'est pas trouvé donc que le chemin que tu as donné est sûrement faux. Si tu donnes un chemin relatif, il sera résolu avec la valeur de la variable user.dir comme préfixe, le mieux pour éviter les ambiguïtés dans eclipse est de donner le chemin absolu vers les fichiers.

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    effectivement erreur de débutant
    le chemin n'était pas reconnu donc le mettre en absolu et ça passe
    merci à toi pour toutes ces explications et aide pour la compilation

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Web contre client/serveur que choisir??
    Par silvermoon dans le forum Débats sur le développement - Le Best Of
    Réponses: 41
    Dernier message: 24/01/2004, 16h53
  2. Quel outil pour du développement Client/Serveur (Win XP) ?
    Par jey_bonnet dans le forum Débats sur le développement - Le Best Of
    Réponses: 5
    Dernier message: 02/11/2002, 15h57
  3. Réponses: 2
    Dernier message: 01/10/2002, 13h25
  4. comment gerer plusieurs connexions client/serveur
    Par naili dans le forum C++Builder
    Réponses: 3
    Dernier message: 14/08/2002, 17h58
  5. Langage le mieux adapté pour application client serveur ?
    Par guenus dans le forum Débats sur le développement - Le Best Of
    Réponses: 4
    Dernier message: 17/06/2002, 16h46

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