У меня есть приложение Apache Camel, которое построено поверх Spring Boot с использованием библиотеки camel-spring-boot-starter
. Я пытаюсь отправить сообщения SOAP с помощью компонента CXF во внешнюю систему, которая предоставляет конечную точку HTTPS, защищенную самозаверяющим сертификатом. У меня нет доступа к сертификату, чтобы импортировать его в хранилище ключей, которое, как я знаю, является самым простым вариантом.
Мой верблюжий маршрут внутри моего RouteBuilder
экземпляра выглядит так:
@Override
public void configure() throws Exception
{
from(STATUS_REQUEST_TRIGGER)
.to("cxf:" + statusEndpoint + "?serviceClass=" + ExternalSoapService.class.getName()
+ "&loggingFeatureEnabled=true"
+ "&properties.schema-validation-enabled=true");
}
Локально все работает, но когда я указываю statusEndpoint
на внешнюю систему, которая использует самоподписанный сертификат, возникает исключение:
org.apache.cxf.interceptor.Fault: Could not send Message.
at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:64)
...
Caused by: javax.net.ssl.SSLHandshakeException: SSLHandshakeException invoking https://externalsystem.co.uk/interface: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Можно ли как-то настроить компонент верблюда, чтобы пропустить проверку сертификата? Этот компонент будет использоваться только в тестовых сценариях и не будет работать в рабочей среде, поэтому я согласен с рисками, связанными с пропуском проверки сертификата.