Cliente CXF: no se puede encontrar una ruta de certificación válida para el objetivo solicitado

Estoy intentando implementar un cliente para un servicio web basado en CXF que también escribí.

Mi servicio web funciona muy bien (probado que funciona bien a través de soapUI), pero la ejecución del cliente falla con lo siguiente:

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)

El mensaje señala claramente un problema de certificado, así que hice una búsqueda rápida y encontré el enfoque correcto parasoportando SSL en CXF y agregué lo siguiente a mi XML de configuración de contexto de la aplicación 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>

Y reconstruir el cliente. El cliente se construyó correctamente, pero todavía obtengo el mismo error exacto y el mismo seguimiento exacto de la pila, como si nunca hubiera agregado estohttp:conduit cosa.

Todavía no he agregado el certificado a la tienda, y la ruta de acceso a la tienda es incorrecta, pero esto es intencional ya que solo quería ver cómo el cliente reconstruido informa este problema, ajustándose a la nuevahttp:conduit información.

En cambio, me sorprendió ver que se ignoraba por completo.

¿Qué me he perdido?

¿Cuál es la forma correcta de abordar esto?

Actualizar: Acabo de notar mi aplicacióncontext.xml subrayandohttp:conduit con este mensaje de error:

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

Así que hice una búsqueda rápida y encontréun hilo eso sugiere:

El cliente debe configurar el conducto HTTP con el almacén de claves que contiene el certificado del STS, por ejemplo:

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

Lo que refuerza lo que escribió @GreyBeardedGeek. Caminante atrabajar en esto ahora...

Respuestas a la pregunta(1)

Su respuesta a la pregunta