2017-03-19 1 views
0

Im codant une application de conversation client-serveur. Je veux crypter la connexion entre ces deux. Je fais ça pour ma première fois et je trouve cela difficile. Dans ma compréhension, j'ai besoin d'un truststore pour le client et un keystore pour le serveur. J'ai suivi ce guide pour les générer: http://peoplesofttutorial.com/generating-key-store-and-trust-store-using-keytool/JAVA, Problème avec la connexion SSLSocket

Client:

 System.setProperty("javax.net.ssl.trustStore" , "hrms.truststore"); 
     System.setProperty("javax.net.ssl.trustStorePassword" , "123456"); 
     SSLSocketFactory sslsf = (SSLSocketFactory) SSLSocketFactory.getDefault(); 
     SSLsocket = (SSLSocket) sslsf.createSocket(server, port); 

Serveur:

 System.setProperty("javax.net.ssl.keyStore" , "pskey.keystore"); 
     System.setProperty("javax.net.ssl.keyStorePassword","123456"); 
     SSLServerSocketFactory sslsocketfactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); 
     sslserversocket = (SSLServerSocket) sslsocketfactory.createServerSocket(Port);  

serveur démarre correctement. Lorsque je connecte un client qui est exécuté sur le même ordinateur que le serveur, je peux me connecter sans problème, mais lorsque je me connecte à partir d'un autre ordinateur qui se trouve sur le même réseau, j'obtiens cette erreur: javax.net.ssl.SSLException: Reçu alerte fatale: internal_error

Quelqu'un pourrait-il m'aider à résoudre cette erreur?

+0

votre serveur a besoin d'un certificat connu connu de java qui s'étend des certificats racines. vous avez besoin d'un vrai certificat ou vous devez l'importer dans cacerts en utilisant keytools. vous pouvez également activer le débogage par la suite afin de voir les erreurs en cours. – benchpresser

+0

votre extrait a travaillé ici (deux machines exécutant oracle java 8 u121 dans le même réseau). Veuillez décrire votre environnement, et cette journalisation peut vous aider: 'System.setProperty (" javax.net.debug "," ssl ");' – nandsito

+0

@nandsito Mon environnement est le suivant: Les deux ordinateurs exécutent java 1.8.0_121, les deux ordinateurs sont connectés au même réseau, les deux exécutent Windows 10, l'ordinateur A exécute le serveur et un client, le client sur l'ordinateur A fonctionne correctement, l'ordinateur B exécute clinet et cet ordinateur obtient une erreur lors de la connexion. J'ajoute un lien vers copypaste: [link] https://codepaste.net/fmyekg – beli

Répondre

0

J'ai résolu mon problème. Mon magasin de confiance et keystone étaient dans mes fichiers de projet, mais quand je l'ai compilé à jar runnable je pensais que trust store et keystore sont inclus dans ce pot runnable, malheureusement, ils ne le sont pas. Je l'ai résolu en plaçant truststore et keystore dans un dossier avec le pot runnable. La solution était vraiment simple et tout le problème est survenu à cause de mon inexpérience.

Nous vous remercions de votre aide.