Cliente CXF: não foi possível encontrar o caminho de certificação válido para o destino solicitado

Eu estou tentando implementar um cliente para um serviço da web baseado em CXF que também escrevi.

Meu serviço web funciona muito bem (testado funcionando bem via soapUI), mas a execução do cliente falha com o seguinte:

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)

A mensagem aponta claramente para um problema de certificado, então eu fiz uma pesquisa rápida e encontrei a abordagem correta parasuportando SSL no CXF e adicionei o seguinte ao XML de configuração de contexto do meu aplicativo 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>

E reconstruiu o cliente. O cliente foi criado com sucesso, mas ainda estou recebendo o mesmo erro exato e o mesmo rastreamento de pilha exato, como se eu nunca tivesse adicionado essehttp:conduit coisa.

Ainda não adicionei o certificado à loja, e o caminho para a loja está incorreto, mas isso é intencional, pois queria apenas ver como o cliente reconstruído reporta esse problema, ajustando-o ao novohttp:conduit em formação.

Em vez disso, fiquei surpreso ao ver que foi ignorado por completo.

O que eu perdi?

Qual é a maneira correta de abordar isso?

Atualizar: Acabei de notar meu sublinhado applicationcontext.xmlhttp:conduit com esta mensagem de erro:

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

Então eu fiz uma pesquisa rápida e encontreium fio isso sugere:

O cliente precisa configurar o canal HTTP com o keystore que contém o certificado do STS, por exemplo:

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

O que reforça o que @GreyBeardedGeek escreveu. Indo atrabalhar nisso agora...

questionAnswers(1)

yourAnswerToTheQuestion