IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Sécurité Java Discussion :

problème de certificat lors d'un test de webservice


Sujet :

Sécurité Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 30
    Par défaut problème de certificat lors d'un test de webservice
    Bonjour, je travaille sur un projet où le but est de lancer des tests SOAPUI via Junit. Jusqu'ici pas de problèmes. Les tests sont bien lancés le soucis intervient lors de l'envoi de la requête au webservice, j'obtiens une erreur :

    09:57:06,546 ERROR [SoapUI] An error occured [Received fatal alert: handshake_failure], see error log for details
    javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

    Je suppose que cela vient du certificat, j'ai donc essayer d'accèder à l'url via mozilla je peux accéder à l'adresse avec un certif PKCS12 qui est dans mon navigateur. Maintenant je voudrais savoir comment reproduire ce comportement dans mon code java ...

    Dans les répertoires de configuration de SOAPui, j'ai pu trouvé différentes sortes de fichiers

    - des certificats
    - des keystores clients
    - des keystores serveurs

    Je ne sais pas quoi faire c'est un peu le fouillis dans ma tête

    Si quelqu'un pouvait m'aider ... merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    Peux tu donner plus de détails sur l'exception avec la stacktrace stp ?
    Le code des tests serait aussi intéressant à voir

    A plus

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 30
    Par défaut
    L'erreur est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    2010-11-15 09:34:17,468 INFO  [SoapUI] Adding [D:\workspace\test-auto-simu\.\ext\wsdl4j-1.6.2.jar] to extensions classpath
    2010-11-15 09:34:17,468 INFO  [DefaultSoapUICore] Creating new settings at [d:\Documents and Settings\admin\soapui-settings.xml]
    2010-11-15 09:34:21,046 INFO  [WsdlProject] Loaded project from [file:D:/Simulateur/simu-conf/soapui-prj/client/Test-simu-auto-soapui-project.xml]
    2010-11-15 09:34:23,171 INFO  [testRunner] On a récupéré le certificat
    2010-11-15 09:34:25,062 INFO  [log] Incrément du numero_session_immat : A0105013
    2010-11-15 09:34:25,062 INFO  [log] Incrément du vin : VF1VY0C06A0105013
    2010-11-15 09:34:25,062 INFO  [log] Incrément du numero_lot_notif : M3001_N090
    2010-11-15 09:34:27,734 ERROR [WsdlSubmit] Exception in request: java.net.SocketException: Software caused connection abort: recv failed
    2010-11-15 09:34:27,734 ERROR [SoapUI] An error occured [Software caused connection abort: recv failed], see error log for details
    2010-11-15 09:34:27,765 ERROR [errorlog] java.net.SocketException: Software caused connection abort: recv failed
    java.net.SocketException: Software caused connection abort: recv failed
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(SocketInputStream.java:129)
        at com.sun.net.ssl.internal.ssl.InputRecord.readFully(InputRecord.java:293)
        at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:331)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:723)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.waitForClose(SSLSocketImpl.java:1366)
        at com.sun.net.ssl.internal.ssl.HandshakeOutStream.flush(HandshakeOutStream.java:103)
        at com.sun.net.ssl.internal.ssl.Handshaker.sendChangeCipherSpec(Handshaker.java:590)
        at com.sun.net.ssl.internal.ssl.ClientHandshaker.sendChangeCipherAndFinish(ClientHandshaker.java:698)
        at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverHelloDone(ClientHandshaker.java:624)
        at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:160)
        at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:495)
        at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:433)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:818)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1030)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:622)
        at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59)
        at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
        at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
        at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:506)
        at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2114)
        at com.eviware.soapui.impl.wsdl.submit.transports.http.support.methods.ExtendedPostMethod.writeRequest(ExtendedPostMethod.java:107)
        at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096)
        at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
        at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
        at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
        at com.eviware.soapui.impl.wsdl.submit.transports.http.HttpClientRequestTransport.sendRequest(HttpClientRequestTransport.java:202)
        at com.eviware.soapui.impl.wsdl.WsdlSubmit.run(WsdlSubmit.java:123)
        at com.eviware.soapui.impl.wsdl.WsdlSubmit.submitRequest(WsdlSubmit.java:76)
        at com.eviware.soapui.impl.wsdl.WsdlRequest.submit(WsdlRequest.java:236)
        at com.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequestStep.run(WsdlTestRequestStep.java:324)
        at com.eviware.soapui.impl.wsdl.testcase.WsdlTestCaseRunner.runTestStep(WsdlTestCaseRunner.java:207)
        at com.eviware.soapui.impl.wsdl.testcase.WsdlTestCaseRunner.internalRun(WsdlTestCaseRunner.java:138)
        at com.eviware.soapui.impl.wsdl.testcase.WsdlTestCaseRunner.internalRun(WsdlTestCaseRunner.java:39)
        at com.eviware.soapui.impl.wsdl.support.AbstractTestRunner.run(AbstractTestRunner.java:135)
        at com.eviware.soapui.impl.wsdl.support.AbstractTestRunner.start(AbstractTestRunner.java:77)
        at com.eviware.soapui.impl.wsdl.testcase.WsdlTestCase.run(WsdlTestCase.java:599)
        at com.eviware.soapui.impl.wsdl.testcase.WsdlTestCase.run(WsdlTestCase.java:66)
        at fr.mi.siv.simu.test.auto.TestConsultSituAdm.testRunner(TestConsultSituAdm.java:65)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)
        at org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98)
        at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79)
        at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87)
        at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)
        at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
        at org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)
        at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
        at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
        at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
        at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
        at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
        at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
        at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
    Les traces info au début m'indique que l'on rentre bien dans mon test et que l'on incrémente les variables demandaient comme il le faut avant de finir en exception.

    et le code que j'utilise pour appeler mon test SOAPUI est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @Test
        public void testRunner() throws Exception {
     
          /**
           * Lancement de l'intégrité du projet 
           */
     
          WsdlProject project = new WsdlProject( "D:\\workspace\\Test-simu-auto-soapui-project.xml" ); 
          TestSuite testSuite = project.getTestSuiteByName( "test_auto_simu" ); 
          TestCase testCase = testSuite.getTestCaseByName( "TestSuite" );
     
          final TestRunner runner = testCase.run(new PropertiesMap(),false);
        }
    Je suis toujours bloqué là-dessus si tu pouvais m'aider à comprendre ... Merci !

  4. #4
    Invité
    Invité(e)
    Par défaut
    L'erreur que tu donnes est différente de celle dont tu parles au dessus... Celle de ton fichier de log est surement liée à un problème de réseau (voir http://stackoverflow.com/questions/1...rt-recv-failed)
    Celle dont tu parles au début semble plutôt indiquer que le client et le server n'ont pas réussi à se mettre d'accord.
    Donc vérifie ton réseau, reteste et donne la stacktrace complète correspondant à le première erreur.
    Le code que tu donnes n'est pas vraiment utile car il ne montre pas du tout comment tu parles avec le server.
    Les questions à se poser sont : est-ce que le certificat du server est dans le truststore utilisé par tests ? Est-ce que ton appli doit s'authentifier auprès du server (tu parles de p12, donc c'est possible que oui). Dans ce cas, as-tu tout renseigné (keystore, mdp, ...) quand tu lances ton appli afin de faire en sorte que l'authentification client marche...
    Là c'est c'est un peu dur de t'aider sans tous ces détails.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 30
    Par défaut
    Je pense qu'il y a parfois des problèmes réseaux car dépendant des fois j'ai l'erreur que j'ai donné dans le post précédent et d'autres un handshake failure.
    Sachant, qu'il faut normalement un certificat pour accéder à l'url je pense que le handshake failure intervient à tout moment (juste que dans le cas présent, il doit y avoir un problème de réseau comme tu dis, il faut que je me renseigne à ce sujet).

    Mon soucis est que j'ai du mal à comprendre ces histoires de truststore et keystore.
    Pour l'instant je sais que je dois ajouté le certificat qui va être utiliser pour l'échange (client=>server) dans le keystore cacerts :
    - keytool -import -alias imm -keystore ..\lib\security\cacerts -file c:\certimm.crt).
    Et qu'il faut aussi que j'ajoute au truststore de mon client le certificat du serveur :
    - keytool -import -trustcacerts -alias certS -file immS.cer -keystore ..\lib\security\cacerts).

    Est ce qu'il y a quelque chose que j'ai raté ?

    EDIT : Concernant le dialogue entre client et serveur je n'ai aucune visibilité dessus étant donné que c'est SOAPUI qui s'occupe de cela.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 30
    Par défaut
    Après un petit reboot voici l'erreur que j'avais au départ :

    2010-11-15 15:03:08,671 INFO [SoapUI] Adding [D:\workspace\test-auto-simu\.\ext\wsdl4j-1.6.2.jar] to extensions classpath
    2010-11-15 15:03:08,671 INFO [DefaultSoapUICore] Creating new settings at [d:\Documents and Settings\admin\soapui-settings.xml]
    2010-11-15 15:03:11,687 INFO [WsdlProject] Loaded project from [file:/Simulateur/simu-conf/soapui-prj/client/Test-simu-auto-soapui-project.xml]
    2010-11-15 15:03:16,140 ERROR [WsdlSubmit] Exception in request: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
    2010-11-15 15:03:16,140 ERROR [SoapUI] An error occured [Received fatal alert: handshake_failure], see error log for details
    2010-11-15 15:03:16,140 ERROR [errorlog] javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
    javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
    at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:150)
    at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:117)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1584)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:866)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1030)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:622)
    at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59)
    at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
    at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
    at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:506)
    at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2114)
    at com.eviware.soapui.impl.wsdl.submit.transports.http.support.methods.ExtendedPostMethod.writeRequest(ExtendedPostMethod.java:107)
    at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096)
    at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
    at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
    at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
    at com.eviware.soapui.impl.wsdl.submit.transports.http.HttpClientRequestTransport.sendRequest(HttpClientRequestTransport.java:202)
    at com.eviware.soapui.impl.wsdl.WsdlSubmit.run(WsdlSubmit.java:123)
    at com.eviware.soapui.impl.wsdl.WsdlSubmit.submitRequest(WsdlSubmit.java:76)
    at com.eviware.soapui.impl.wsdl.WsdlRequest.submit(WsdlRequest.java:236)
    at com.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequestStep.run(WsdlTestRequestStep.java:324)
    at com.eviware.soapui.impl.wsdl.testcase.WsdlTestCaseRunner.runTestStep(WsdlTestCaseRunner.java:207)
    at com.eviware.soapui.impl.wsdl.testcase.WsdlTestCaseRunner.internalRun(WsdlTestCaseRunner.java:138)
    at com.eviware.soapui.impl.wsdl.testcase.WsdlTestCaseRunner.internalRun(WsdlTestCaseRunner.java:39)
    at com.eviware.soapui.impl.wsdl.support.AbstractTestRunner.run(AbstractTestRunner.java:135)
    at com.eviware.soapui.impl.wsdl.support.AbstractTestRunner.start(AbstractTestRunner.java:77)
    at com.eviware.soapui.impl.wsdl.testcase.WsdlTestCase.run(WsdlTestCase.java:599)
    at com.eviware.soapui.impl.wsdl.testcase.WsdlTestCase.run(WsdlTestCase.java:66)
    at fr.mi.siv.simu.test.auto.TestConsultSituAdm.testRunner(TestConsultSituAdm.java:65)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)
    at org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98)
    at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79)
    at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87)
    at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)
    at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
    at org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)
    at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
    at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
    at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
    at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
    at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)

  7. #7
    Invité
    Invité(e)
    Par défaut
    Ok donc c'est bien ça, ton test ne s'authentifie pas, ce qui semble être requis par le server.
    Je ne connais pas soapui, mais il me semble que devrais regarder comment le configurer pour l'authentification client, peut-être cette conversation pourra t'aider http://www.soapui.org/forum/viewtopi...t=4559&p=15495
    Sinon il faut que tu cherches dans la doc de soapui

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 30
    Par défaut
    Ok merci pour la confirmation.
    Mon soucis c'est que lorsque je lance les tests via SOAPUI tout fonctionne mais par Junit non ...
    Cependant il est aussi possible que du fait que la version de SOAPUI que j'utilise a été personnalisé, cette gestion des certificats est prise en compte dans la version modifiée et que mon test Junit ne reprennent pas cette configuration ...

    Serait-il possible que cette configuration doivent se faire au niveau du projet de test junit sous eclipse (qui appelle le projet SOAPUI qui s'occupe de faire les requêtes au WS) ?

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 30
    Par défaut
    Si cela peut aider quelqu'un un jour, il suffisait simplement d'ajouter une keystore à la config soapui avec les lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      SoapUI.getSettings().setString( SSLSettings.KEYSTORE_PASSWORD, "pass" );
          SoapUI.getSettings().setString( SSLSettings.KEYSTORE, "./src/test/keystore/key.keystore");

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Tests] require_once lors d'un test
    Par M4kn4sh dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 24/10/2012, 10h11
  2. problème de cache lors du chargement d'applet
    Par ellocin dans le forum Applets
    Réponses: 4
    Dernier message: 05/04/2007, 12h31
  3. Problème avec OpenEx lors d'un enregistrement
    Par jessy82 dans le forum MFC
    Réponses: 1
    Dernier message: 05/04/2005, 19h44
  4. Réponses: 9
    Dernier message: 04/03/2005, 13h58
  5. [VC++6][DX9] Problème de thread lors d'un blit ...
    Par grandjouff dans le forum DirectX
    Réponses: 2
    Dernier message: 12/06/2003, 22h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo