Klient CXF: nie można znaleźć prawidłowej ścieżki certyfikacji do żądanego celu

Usiłuję zaimplementować klienta dla usługi internetowej opartej na CXF, którą również napisałem.

Moja usługa internetowa działa świetnie (przetestowano, czy działa poprawnie za pomocą soapUI), ale uruchomienie klienta kończy się niepowodzeniem, co następuje:

Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:323)

Wiadomość wyraźnie wskazuje na problem z certyfikatem, więc zrobiłem szybkie wyszukiwanie i znalazłem właściwe podejście doobsługa SSL w CXF i dodał poniższy kod XML do konfiguracji kontekstu aplikacji Spring:

  <http:conduit name="https://myserver/myws/register/soap?wsdl:{http://glob.reg.com/myws}.http-conduit">

    <http:tlsClientParameters>
      <sec:keyManagers keyPassword="password">
        <sec:keyStore type="JKS" password="password"
                      file="my/file/dir/Morpit.jks"/>
      </sec:keyManagers>
      <sec:trustManagers>
        <sec:keyStore type="JKS" password="password"
                      file="my/file/dir/Truststore.jks"/>
      </sec:trustManagers>
      <sec:cipherSuitesFilter>
        <!-- these filters ensure that a ciphersuite with
             export-suitable or null encryption is used,
             but exclude anonymous Diffie-Hellman key change as
             this is vulnerable to man-in-the-middle attacks -->
        <sec:include>.*_EXPORT_.*</sec:include>
        <sec:include>.*_EXPORT1024_.*</sec:include>
        <sec:include>.*_WITH_DES_.*</sec:include>
        <sec:include>.*_WITH_AES_.*</sec:include>
        <sec:include>.*_WITH_NULL_.*</sec:include>
        <sec:exclude>.*_DH_anon_.*</sec:exclude>
      </sec:cipherSuitesFilter>
    </http:tlsClientParameters>
    <http:authorization>
      <sec:UserName>Betty</sec:UserName>
      <sec:Password>password</sec:Password>
    </http:authorization>
    <http:client AutoRedirect="true" Connection="Keep-Alive"/>

  </http:conduit>

I przebudowałem klienta. Klient zbudował się pomyślnie, ale wciąż otrzymuję ten sam dokładny błąd i ten sam dokładny ślad stosu, jakbym nigdy tego nie dodałhttp:conduit rzecz.

Nie dodałem jeszcze certyfikatu do sklepu, a ścieżka do sklepu jest niepoprawna, ale jest to zamierzone, ponieważ chciałem zobaczyć, jak zrekonstruowany klient zgłasza ten problem, dostosowując się do nowegohttp:conduit Informacja.

Zamiast tego byłem zaskoczony, że został całkowicie zignorowany.

Co przegapiłem?

Jaki jest właściwy sposób podejścia do tego?

Aktualizacja: Właśnie zauważyłem podkreślenie mojego pliku applicationcontext.xmlhttp:conduit z tym komunikatem o błędzie:

The prefix "http" for element "http:conduit" is not bound.

Zrobiłem więc szybkie wyszukiwanie i znalazłemwątek co sugeruje:

Klient musi skonfigurować kanał HTTP za pomocą magazynu kluczy zawierającego certyfikat STS, np .:

 <http:conduit name="https://localhost:.*">
      <http:tlsClientParameters disableCNCheck="true">
        <sec:trustManagers>
          <sec:keyStore type="jks" password="cspass" resource="clientstore.jks"/>
        </sec:trustManagers>
      </http:tlsClientParameters>
  </http:conduit>

Co wzmacnia to, co napisał @GreyBeardedGeek. Zamierzampracuj nad tym teraz...

questionAnswers(1)

yourAnswerToTheQuestion