2010-02-10 7 views
6

Je crée un programme client Java qui enverra des informations sensibles à un serveur Tomcat. J'ai donc besoin d'utiliser la connexion SSL pour que les informations soient cryptées.Connexion SSL à partir du client Java

Je dois utiliser un certificat non approuvé auto-signé, mais j'ai des problèmes de connexion avec le client java.

J'ai réussi à installer Tomcat 5.5 pour utiliser SSL et l'ai testé via Firefox, qui affiche un avertissement de certificat auto-signé.

J'ai suivi la configuration SSL Tomcat 5.5 et ils ont mentionné pour créer un fichier de clés:

keytool -genkey -alias tomcat -keyalg RSA

Je l'ai fait une exportation de ce qui précède:

keytool -export -keystore .keystore -alias tomcat -file localhost.cer

Puis j'ai fait une importation du certificat ci-dessus dans la machine client:

keytool -import -alias tomcat -file localhost.cer -keystore "C:\Program Files"\Java\jdk1.6.0_17\jre\lib\security\cacerts"

Mais lorsque le client en cours d'exécution je reçois:

Exception dans le thread "principal" javax.net. ssl.SSLHandshakeException: sun.security.validator.ValidatorException: Échec de la construction du chemin PKIX: sun.security.provider.certpath.SunCertPathBuilderException: impossible de trouver le chemin de certification valide vers la cible demandée

Ceci est le code client:

URL url = new URL("https://localhost:8443"); 
HttpsURLConnection conn = (HttpsURLConnection)url.openConnection(); 
conn.setSSLSocketFactory(sslsocketfactory); 
InputStream inputstream = conn.getInputStream(); 

Maintenant, je viens de commencer à jouer avec ces certificats aujourd'hui et je suis nouveau keystores, donc s'il vous plaît soyez patient.

Quelqu'un peut-il expliquer comment exporter et importer le certificat créé dans Tomcat sur la machine cliente?

Merci.

+1

Peut-être avez-vous importé le mauvais certificat, ou peut-être l'avez-vous importé dans le mauvais JRE.Beaucoup de gens ont plusieurs JRE sur leurs machines. Vous devriez lister le contenu de cacerts et voir si votre cert est dedans. En outre, vous pouvez définir la propriété système java.net.debug = all pour voir plus de détails sur l'envoi et la vérification des pièces du certificat. –

Répondre

1

Atlassian a de bonnes instructions sur la façon de résoudre ce problème.

http://confluence.atlassian.com/display/JIRA/Connecting+to+SSL+services

Une autre approche consiste à installer un certificat moins impitoyables validateurs, mais cela ne devrait être fait en dernier recours.

+0

Le problème est qu'il semble qu'il a fait ces étapes. –

+0

Si je désactive complètement la validation de la certification SSL, les données envoyées au serveur seront-elles toujours cryptées? J'ai trouvé un exemple qui ne valide pas les certificats SSL mais qui veut s'assurer que la transmission des données sera toujours cryptée. – Marquinio

+1

Si vous désactivez la validation SSL, le tunnel SSL existe toujours et les données seront toujours cryptées. ** MAIS ** vous ne saurez plus où ce tunnel est terminé! Un attaquant pourrait faire quelque chose comme ça pour briser votre sécurité: empoisonner votre DNS avec une adresse IP arbitraire, générer un CERT SSL auto-signé pour le FQDN que vous connectez, écouter SSL sur une adresse IP empoisonnée et répondre avec un faux certificat SSL. Sans validation, votre client SSL fera confiance au certificat SSL du serveur, quelle que soit l'autorité de certification d'où il provient. –

0

Utilisez Apache HTTP Cleint et suivez le SSL Guide.

EasySSLProtocolSocketFactory peut être utilisé pour créer des connexions SSL qui permettent au serveur cible de s'authentifier avec un certificat auto-signé.

+1

La personne qui a marqué négatif peut-elle expliquer pourquoi? J'ai utilisé cette solution et cela fonctionne très bien. –

0

Je pense que vous devriez entrer le mot de passe en utilisant "changeit".

Questions connexes