Je me suis connecté avec VPN pour configurer l'API d'inventaire afin d'obtenir la liste des produits et cela fonctionne bien. Une fois que j'obtiens le résultat du service Web et que je me lie à l'interface utilisateur. Et j'ai également intégré PayPal à mon application pour effectuer un paiement express lorsque je fais un appel de paiement, je suis confronté à cette erreur. J'utilise un servlet pour le processus back-end. Quelqu'un peut-il dire comment résoudre ce problème?
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException:
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException:
unable to find valid certification path to requested target
Réponses:
Tout d'abord, vous devez obtenir le certificat public du serveur auquel vous essayez de vous connecter. Cela peut être fait de différentes manières, comme contacter l'administrateur du serveur et le demander, utiliser OpenSSL pour le télécharger ou, comme cela semble être un serveur HTTP, s'y connecter avec n'importe quel navigateur, afficher les informations de sécurité de la page. et enregistrer une copie du certificat. (Google devrait être en mesure de vous dire exactement quoi faire pour votre navigateur spécifique.)
Maintenant que vous avez enregistré le certificat dans un fichier, vous devez l'ajouter au magasin de confiance de votre JVM. A
$JAVA_HOME/jre/lib/security/
pour JREs ou$JAVA_HOME/lib/security
pour JDKs, il y a un fichier nommécacerts
, qui est livré avec Java et contient les certificats publics des autorités de certification bien connus. Pour importer le nouveau certificat, exécutez keytool en tant qu'utilisateur autorisé à écrire sur cacerts:Il vous demandera probablement un mot de passe. Le mot de passe par défaut fourni avec Java est
changeit
. Presque personne ne le change. Une fois ces étapes relativement simples terminées, vous communiquerez en toute sécurité et avec l'assurance que vous parlez au bon serveur et uniquement au bon serveur (tant qu'ils ne perdent pas leur clé privée).la source
Maintenant, j'ai résolu ce problème de cette façon,
Bien entendu, cette solution ne doit être utilisée que dans des scénarios où il n'est pas possible d'installer les certificats requis en utilisant
keytool
par exemple des tests locaux avec des certificats temporaires.la source
Chaque fois que nous essayons de nous connecter à l'URL,
si le serveur de l'autre site fonctionne sur le protocole https et exige que nous communiquions via les informations fournies dans le certificat, nous avons l'option suivante:
1) demandez le certificat (téléchargez le certificat), importez ce certificat en trustore. Les utilisations Java de confiance par défaut peuvent être trouvées dans \ Java \ jdk1.6.0_29 \ jre \ lib \ security \ cacerts, alors si nous réessayons de nous connecter à l'URL, la connexion sera acceptée.
2) Dans les cas commerciaux normaux, nous pourrions nous connecter à des URL internes dans des organisations et nous savons qu'elles sont correctes. Dans de tels cas, vous êtes sûr qu'il s'agit de l'URL correcte. Dans les cas ci-dessus, un code peut être utilisé qui ne demandera pas de stocker le certificat pour se connecter à une URL particulière.
pour le point n ° 2, nous devons suivre les étapes ci-dessous:
1) écrivez ci-dessous la méthode qui définit HostnameVerifier pour HttpsURLConnection qui renvoie true pour tous les cas, ce qui signifie que nous faisons confiance au trustStore.
2) écrivez la méthode ci-dessous, qui appelle doTrustToCertificates avant d'essayer de vous connecter à l'URL
Cet appel renverra le code de réponse = 200 signifie que la connexion est réussie.
Pour plus de détails et un exemple d'exemple, vous pouvez vous référer à URL .
la source
SSLHandshakeException peut être résolu de 2 manières.
Incorporer SSL
Obtenez le SSL (en demandant à l'administrateur du système source, peut également être téléchargé par la commande openssl, ou tout navigateur télécharge les certificats)
Ajoutez le certificat dans le truststore (cacerts) situé dans JRE / lib / security
indiquez l'emplacement du truststore dans les arguments vm sous la forme "-Djavax.net.ssl.trustStore ="
Ignorer SSL
Pour ce n ° 2, veuillez visiter mon autre réponse sur un autre site Web stackoverflow: Comment intégrer la vérification SSL Ignorer les erreurs de certificat SSL avec Java
la source
Je pense que vous essayez de vous connecter à quelque chose à l'aide de SSL, mais que quelque chose fournit un certificat qui n'est pas vérifié par les autorités de certification racine telles que verisign. Par défaut, les connexions sécurisées ne peuvent être établies que si la personne qui tente de se connecter sait les clés de contrepartie ou un autre verndor tel que verisign peuvent intervenir et dire que la clé publique fournie est en effet correcte.
ALL OS fait confiance à une poignée d'autorités de certification et de petits émetteurs de certificats doivent être certifiés par l'un des grands certificateurs faisant une chaîne de certificateurs si vous comprenez ce que je veux dire ...
Quoi qu'il en soit, pour revenir au point ... J'ai eu un problème similaire lors de la programmation d'une applet java et d'un serveur java (j'espère qu'un jour j'écrirai un article de blog complet sur la façon dont j'ai fait fonctionner toute la sécurité :))
En substance, ce que je devais faire était d'extraire les clés publiques du serveur et de les stocker dans un magasin de clés à l'intérieur de mon applet et lorsque je me suis connecté au serveur, j'ai utilisé ce magasin de clés pour créer une fabrique de confiance et cette fabrique de confiance pour créer le ssl lien. Il existe également des procédures alternatives telles que l'ajout de la clé à l'hôte de confiance de la JVM et la modification du magasin de confiance par défaut au démarrage.
Je l'ai fait il y a environ deux mois et je n'ai pas de code source sur moi pour le moment .. utilisez Google et vous devriez être en mesure de résoudre ce problème. Si vous ne pouvez pas m'envoyer un message et que je peux vous fournir le code source pertinent pour le projet .. Je ne sais pas si cela résout votre problème puisque vous n'avez pas fourni le code qui cause ces exceptions. De plus, je travaillais avec des applets et je ne voyais pas pourquoi cela ne fonctionnait pas sur les Serverlets ...
PS Je ne peux pas obtenir le code source avant le week-end car SSH externe est désactivé dans mon bureau :(
la source
Maintenant, j'ai résolu ce problème de cette façon,
la source