3
votes

Erreur lors de l'utilisation du service Web de base SOAP sécurisé dans JAVA

Je suis nouveau dans JAVA , service Web consommant (.wsdl) dans le projet Web Service Client . J'importe le certificat client dans la boutique java cacerts de jrd . Mon code est le suivant:

    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

Je n'ai pas réussi à établir la liaison, j'obtiens l'exception suivante:

        System.setProperty("javax.net.ssl.trustStore","[PATH]/cacerts.jks");
        System.setProperty("javax.net.ssl.trustStorePassword","changeit");

        ServicesProxy service = new ServicesProxy();
        ServiceRequest request = new ServiceRequest(1498);
        ServiceResponse response = service.getDetails(request);

Je n'ai aucune idée pourquoi il y a une exception. Toute aide serait appréciée.


3 commentaires

Est-ce que cela utilise Apache CXF comme client de services Web? Il utilise ses propres paramètres SSL dans le fichier cxf.xml - plus de détails ici


Êtes-vous sûr que le nom de votre truststore est cacerts.jks et pas seulement cacerts ?


J'ai aussi essayé avec des cacerts.


6 Réponses :


2
votes

Ce n'est pas une solution à votre problème, mais peut-être que cela aide à le trouver: Vous pouvez démarrer votre client avec le paramètre VM -Djavax.net.debug = all qui vous donnera beaucoup d'informations sur la connexion SSL.

Vérifiez ici pour plus de détails sur la sortie:

https://docs.oracle .com / javase / 7 / docs / technotes / guides / security / jsse / ReadDebug.html


0 commentaires

3
votes

Vous devrez probablement ajouter le porte-clés dans le certificat (format PEM).

CA Root -> Intermediate Cert -> Cert.

Ou le certificat est introuvable dans le keystore, utilisez-vous le bon alias etc.

Et je ne reconnais pas l'implémentation SOAP JAX-WS que vous utilisez.


0 commentaires

2
votes

Utilisez la propriété -Djavax.net.ssl.trustStore directement à la place.

Une autre chose que le serveur que vous utilisez dans laquelle vous devez également placer les jks pour la poignée de main.

Par exemple, le serveur est JBoss puis bin


0 commentaires

0
votes

Votre certificat n'est peut-être pas correctement installé dans votre truststore.

Vous pouvez utiliser openssl pour vérifier et installer le bon certificat dans le truststore, comme expliqué ici


0 commentaires

2
votes

Je suppose que votre cacert n'est pas correct ou que le chemin est inaccessible. J'ai suivi les instructions données ici

Utilisez SSL Poke pour vérifier la connectivité

  1. Téléchargez SSLPoke.class
  2. Exécutez la classe comme suit, en modifiant l'URL et le port:

    $ JAVA_HOME / bin / java SSLPoke yoururl 443

  3. Une connexion réussie ressemblerait à ceci:

    $ JAVA_HOME / bin / java SSLPoke yoururl 443

    Connexion réussie

  4. Essayez d'utiliser un autre truststore pour vous connecter

    $ JAVA_HOME / bin / java -Djavax.net.ssl.trustStore = [CHEMIN] /cacerts.jks SSLPoke yoururl 443

En cas d'échec, le truststore ne contient pas les certificats appropriés.

Comment le résoudre

La solution est extraite de ici a>

  1. Récupérez à nouveau le certificat sur le serveur:

    openssl s_client -connect yoururl: 443

Vous avez besoin de openssl. Enregistrez la sortie dans un fichier appelé public.crt. Voici à quoi devrait ressembler votre fichier:

     -----BEGIN CERTIFICATE-----
     < Bunch of lines of your certificate >
     -----END CERTIFICATE-----
  1. Importez le certificat:

    $ JAVA_HOME / bin / keytool -import -alias -keystore $ JAVA_HOME / jre / lib / security / cacerts -file public.crt

Entrez le mot de passe si vous y êtes invité (la valeur par défaut est changeit)

Recommandation

Dans le même message, il n'est pas recommandé d'utiliser un trustStore configuré différent du cacert JVM car java ne pouvait pas accéder aux autres certificats racine.


0 commentaires

0
votes

Salut On dirait que les certificats ne sont pas importés correctement ou que le chemin utilisé dans le code ne pointe pas vers le fichier de clés correct.

J'espère que les étapes suivantes de l'article ci-dessous vous aideront.

http://magicmonster.com/kb/prg/java/ssl /pkix_path_building_failed.html


0 commentaires