CXF-Client: Es konnte kein gültiger Zertifizierungspfad zum angeforderten Ziel gefunden werden

Ich versuche, einen Client für einen CXF-basierten Webdienst zu implementieren, den ich auch geschrieben habe.

Mein Webdienst funktioniert einwandfrei (getestet, funktioniert einwandfrei über soapUI), aber die Ausführung des Clients schlägt mit den folgenden Problemen fehl:

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)

Die Nachricht weist eindeutig auf ein Zertifikatsproblem hin, daher habe ich eine schnelle Suche durchgeführt und den richtigen Ansatz gefundenUnterstützung von SSL in CXF und fügte Folgendes zu meinem Konfigurations-XML für den Spring-Anwendungskontext hinzu:

  <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>

Und den Client neu aufgebaut. Der Client wurde erfolgreich erstellt, aber es wird immer noch derselbe exakte Fehler und derselbe exakte Stack-Trace angezeigt, als hätte ich ihn nie hinzugefügthttp:conduit Ding.

Ich habe das Zertifikat noch nicht zum Speicher hinzugefügt, und der Pfad zum Speicher ist falsch. Dies ist jedoch beabsichtigt, da ich nur sehen wollte, wie der neu erstellte Client dieses Problem meldet und sich an das neue anpassthttp:conduit Information.

Stattdessen war ich überrascht zu sehen, dass es überhaupt ignoriert wurde.

Was habe ich vermisst?

Wie gehe ich das richtig an?

Aktualisieren: Ich habe gerade bemerkt, dass meine applicationcontext.xml unterstrichen isthttp:conduit mit dieser Fehlermeldung:

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

Also habe ich schnell gesucht und gefundenein Thread das legt nahe:

Der Client muss das HTTP-Conduit mit dem Schlüsselspeicher konfigurieren, der das Zertifikat des STS enthält, z.

 <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>

Was das verstärkt, was @GreyBeardedGeek geschrieben hat. Ich gehe zudaran arbeiten jetzt...

Antworten auf die Frage(1)

Ihre Antwort auf die Frage