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 :
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
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(); } } }
j'ai rentré les informations demandées, le fichier est correctement créer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 keytool -genkey -keystore keys -keyalg RSA
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 petitensuite j'ai tenter d'exécuter de cette manière :
Code : Sélectionner tout - Visualiser dans une fenêtre à part javac SSLServeur.java
et la je me prend une autre exception :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2java -Djavax.net.ssl.keyStore=keys -Djavax.net.ssl.keyStorePassword=123456 SSLServeur
les exception semble m'insulter à propos du fichier généré avec keytool ?
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
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 !
Partager