es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

CXF: El proceso de construcción de ruta PKIX ha fallado: sun.security.provider.certpath.SunCertPathBuilderException: no se pudo encontrar una ruta de certificación válida hasta el destino solicitado.

Construí un cliente CXF para invocar un servicio web SOAP. Importé los certificados del servidor en mi almacén de confianza de cacerts (entiendo que CXF lo utiliza de forma predeterminada) y utilicé el siguiente código para implementar la llamada. Sin embargo, se genera el siguiente error:

sun.security.validator.ValidatorException: Error al construir el camino PKIX: sun.security.provider.certpath.SunCertPathBuilderException: no se pudo encontrar un camino de certificación válido hasta el objetivo solicitado
QName serviceQName = new QName("Namespace", "ServiceName");
String urlString = "https:endpoint?wsdl";
QName portQName = new QName("Namespace", "PortName");

service = Service.create(serviceQName);
service.addPort(portQName, SOAPBinding.SOAP11HTTP_BINDING, urlString);
Dispatch<source> sourceDispatch = service.createDispatch(portQName, Source.class, Service.Mode.PAYLOAD);
BindingProvider bindingProvider = sourceDispatch;
bindingProvider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, urlString);
Source result = sourceDispatch.invoke(new StreamSource(exchange.getIn().getBody(InputStream.class)));
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Este error ocurre porque la implementación SSL de Java no confía en el certificado del servidor. Para resolver este error, debes importar el certificado del servidor en el almacén de confianza de Java utilizado por la aplicación.

    Primero, necesitas obtener el certificado del servidor. Puedes usar un navegador web para conectarte a la URL del punto final y ver la información del certificado. Exporta el certificado en formato DER.

    A continuación, importa el certificado en el almacén de confianza usando keytool:

    keytool -import -alias servercert -keystore cacerts -file servercert.cer
    

    Puedes usar el almacén de confianza por defecto “cacerts” ubicado en la carpeta JRE/lib/security. La contraseña para el almacén de confianza “cacerts” es “changeit”.

    Después de importar el certificado, debes modificar el código de la aplicación para usar el almacén de confianza. Puedes configurar la propiedad del sistema “javax.net.ssl.trustStore” para que apunte a la ubicación del almacén de confianza “cacerts”.

    System.setProperty("javax.net.ssl.trustStore", "/ruta/al/cacerts");
    

    Alternativamente, puedes crear un almacén de confianza personalizado e importar el certificado del servidor en él.

    keytool -import -alias servercert -keystore mytruststore -file servercert.cer
    

    Luego, configura las propiedades del sistema “javax.net.ssl.trustStore” y “javax.net.ssl.trustStorePassword” para usar el almacén de confianza personalizado.

    System.setProperty("javax.net.ssl.trustStore", "/ruta/a/mytruststore");
    System.setProperty("javax.net.ssl.trustStorePassword", "micontraseña");
    

    Después de realizar estos cambios, tu cliente CXF debería poder conectarse al servicio web SOAP sin errores de SSL.

Comments are closed.