web-dev-qa-db-fra.com

Exception Java NoSuchAlgorithmException - SunJSSE, Sun.security.ssl.SSLContextImpl $ DefaultSSLContext

Contexte

J'utilise le kit de développement logiciel Authorize.net dans un projet Eclipse qui lui est propre. Tout fonctionnait très bien. Je devais ensuite l'ajouter à mon projet principal. J'ai ajouté les dépendances au chemin de classe et la copie dans le bloc de code dont j'avais besoin. Cela aurait dû fonctionner.

Problème

Bref, le code ne fonctionnerait pas où je l'ai placé. Cependant, cela fonctionnera si je le mets directement à la méthode principale du projet.

À la place, cela ne fonctionnera pas. Je parcourais le code avec le débogueur et trouvais l'exception suivante:

Java.net.SocketException: Java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: Sun.security.ssl.SSLContextImpl$DefaultSSLContext)

jeté sur:

HttpResponse httpResponse = httpClient.execute(httpPost);

Remarque: httpClient = DefaultHttpClient à partir d'Apache

Je suis complètement perplexe maintenant. Ne pas ce qui cause cette erreur. Dans Eclipse, les deux produits semblent cibler le même JRE. Ils ont également tous les deux httpclient-4.0.1.jar. Notez que le projet problématique a aussi d’autres dépendances que le projet en cours ne fonctionne pas {boneCP, guava, mysql_connector_Java, protobuf}

Je ne pense pas que les bocaux supplémentaires en soient la cause, car le code du problème fonctionne à un emplacement différent du projet.

Toutes les idées sur ce qui ne va pas sont grandement appréciées, j'ai passé la journée à déboguer cela et je ne sais pas où aller ensuite.

Merci.

19
jim

Après une recherche plus poussée, j'ai découvert que l'erreur pouvait être liée à d'autres problèmes tels que les magasins de clés invalides, les mots de passe, etc.

Je me suis alors rappelé que j'avais défini deux arguments VM pour le test de SSL avec ma connectivité réseau.

J'ai supprimé les arguments VM suivants pour résoudre le problème:

-Djavax.net.ssl.keyStore=mySrvKeystore -Djavax.net.ssl.keyStorePassword=123456

Remarque: ce magasin de clés n'existe plus, c'est probablement pourquoi Exception.

24
jim

J'ai eu un problème similaire avec cette erreur. Dans mon cas, je saisissais un mot de passe incorrect pour le magasin de clés.

J'ai changé le mot de passe du magasin de clés pour qu'il corresponde à ce que je saisis (je ne voulais pas changer le mot de passe que je saisissais), mais cela donnait toujours la même erreur.

keytool -storepasswd -keystore keystore.jks

Le problème était que je devais aussi changer le mot de passe de la clé dans le magasin de clés. 

Lorsque j'ai initialement créé le magasin de clés, la clé a été créée avec le même mot de passe que le magasin de clés (j'ai accepté cette option par défaut). Je devais donc aussi changer le mot de passe de la clé comme suit:

keytool -keypasswd  -alias my.alias -keystore keystore.jks
7
RJC

J'ai eu le même problème. Le problème résidait dans les mots de passe: le magasin de clés et la clé privée utilisaient des mots de passe différents. (KeyStore Explorer a été utilisé)

Après avoir créé Keystore avec le même mot de passe que la clé privée, le problème a été résolu.

1
amisiuryk