Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 15 sur 15
  1. #1
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    novembre 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2008
    Messages : 107
    Points : 64
    Points
    64

    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 :
    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 :
    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 :
    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 :
    1
    2
     
    java -Djavax.net.ssl.keyStore=keys -Djavax.net.ssl.keyStorePassword=123456 SSLServeur
    et la je me prend une autre exception :
    Code :
    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 du Club
    Profil pro
    Développeur informatique
    Inscrit en
    novembre 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2008
    Messages : 107
    Points : 64
    Points
    64

    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
    Invité régulier
    Inscrit en
    septembre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : septembre 2010
    Messages : 19
    Points : 9
    Points
    9

    Par défaut

    [QUOTE=deglingo592003;4536644]
    Code :
    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
    Membre Expert
    Avatar de George7
    Homme Profil pro
    Inscrit en
    août 2006
    Messages
    1 234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : août 2006
    Messages : 1 234
    Points : 1 477
    Points
    1 477

    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
    "Ikea / furnishing = OSGi / software : They allow to have very modular things, but trying to put them together generally drives you crazy"
    -- Mario Fusco

    Pour vos développements Java : apprenez à utiliser la javadoc

  5. #5
    Invité régulier
    Inscrit en
    septembre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : septembre 2010
    Messages : 19
    Points : 9
    Points
    9

    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 :
    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 :
    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
    Membre Expert
    Avatar de George7
    Homme Profil pro
    Inscrit en
    août 2006
    Messages
    1 234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : août 2006
    Messages : 1 234
    Points : 1 477
    Points
    1 477

    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
    "Ikea / furnishing = OSGi / software : They allow to have very modular things, but trying to put them together generally drives you crazy"
    -- Mario Fusco

    Pour vos développements Java : apprenez à utiliser la javadoc

  7. #7
    Invité régulier
    Inscrit en
    septembre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : septembre 2010
    Messages : 19
    Points : 9
    Points
    9

    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
    Membre Expert
    Avatar de George7
    Homme Profil pro
    Inscrit en
    août 2006
    Messages
    1 234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : août 2006
    Messages : 1 234
    Points : 1 477
    Points
    1 477

    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)
    "Ikea / furnishing = OSGi / software : They allow to have very modular things, but trying to put them together generally drives you crazy"
    -- Mario Fusco

    Pour vos développements Java : apprenez à utiliser la javadoc

  9. #9
    Invité régulier
    Inscrit en
    septembre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : septembre 2010
    Messages : 19
    Points : 9
    Points
    9

    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
    Membre Expert
    Avatar de George7
    Homme Profil pro
    Inscrit en
    août 2006
    Messages
    1 234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : août 2006
    Messages : 1 234
    Points : 1 477
    Points
    1 477

    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.
    "Ikea / furnishing = OSGi / software : They allow to have very modular things, but trying to put them together generally drives you crazy"
    -- Mario Fusco

    Pour vos développements Java : apprenez à utiliser la javadoc

  11. #11
    Invité régulier
    Inscrit en
    septembre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : septembre 2010
    Messages : 19
    Points : 9
    Points
    9

    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
    Invité régulier
    Inscrit en
    septembre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : septembre 2010
    Messages : 19
    Points : 9
    Points
    9

    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
    Invité régulier
    Inscrit en
    septembre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : septembre 2010
    Messages : 19
    Points : 9
    Points
    9

    Par défaut

    ça ne dit rien à personne?

  14. #14
    Membre Expert
    Avatar de George7
    Homme Profil pro
    Inscrit en
    août 2006
    Messages
    1 234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : août 2006
    Messages : 1 234
    Points : 1 477
    Points
    1 477

    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.
    "Ikea / furnishing = OSGi / software : They allow to have very modular things, but trying to put them together generally drives you crazy"
    -- Mario Fusco

    Pour vos développements Java : apprenez à utiliser la javadoc

  15. #15
    Invité régulier
    Inscrit en
    septembre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : septembre 2010
    Messages : 19
    Points : 9
    Points
    9

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •