Какой самый оптимальный способ сделать API на Apache Camel для реализации (SSL) для HTTPS? - PullRequest
0 голосов
/ 03 апреля 2019

Я хочу, чтобы мой API, созданный с помощью Apache-Camel, был включен HTTPS.Я провел некоторое чтение различных способов (используя Jetty, Netty и т. Д.), Но я хочу знать, каков самый простой и эффективный способ реализации SSL для моего API на основе верблюдов.Вот моя текущая конфигурация, я бы предпочел (для простоты, если бы я мог использовать netty4-http)

public void configure() {

    restConfiguration()
    .component("netty4-http")//Specifies the Camel component to use as the REST transport
    .host("0.0.0.0")//The hostname to use for exposing the REST service
    .port(8080).bindingMode(RestBindingMode.auto)
            .rest("/v1/API.Endpoint")

Спасибо, ребята!

1 Ответ

1 голос
/ 03 апреля 2019

Вы можете настроить компонент Netty4, как указано в официальных документах , сначала указав SSLContextParameters для использования, который просто определяет, где можно найти сертификат для использования во время рукопожатия SSL, а затем установитеэто на компонент netty:

KeyStoreParameters ksp = new KeyStoreParameters();
ksp.setResource("/users/home/server/keystore.jks");
ksp.setPassword("keystorePassword");

KeyManagersParameters kmp = new KeyManagersParameters();
kmp.setKeyStore(ksp);
kmp.setKeyPassword("keyPassword");

SSLContextParameters scp = new SSLContextParameters();
scp.setKeyManagers(kmp);

NettyComponent nettyComponent = getContext().getComponent("netty4", NettyComponent.class);
nettyComponent.setSslContextParameters(scp);

Если вы используете Spring (Boot), это легко сделать во время процедуры инициализации контекста Camel:

@Bean
CamelContextConfiguration contextConfiguration() {
    return new CamelContextConfiguration() {
       @Override
        public void beforeApplicationStart(CamelContext camelContext) {
            // code goes in here
        }

        @Override
        public void afterApplicationStart(CamelContext camelContext) {
            // noop
        }
    };
}

Обратите внимание, что компонент выше назван netty4, это также должно отражаться в остальной части конфигурации:

restConfiguration()
    .component("netty4")
    .host("0.0.0.0")
    .scheme("https")
    .port(8443)
    ...

Подобный подход можно увидеть, только с Jetty в качестве сконфигурированного HTTP-сервера в одном из моих технических демонстрационных проектов, который хранит Конфигурация SSLContextParamteter в своем собственном компоненте, который вводится в Конфигурация Jetty , которая просто устанавливает эти параметры в настроенный компонент Jetty.Позже restConfiguration будет абстрагирован от базового класса , от которого будут расширяться определенные маршруты, выставляющие конечные точки через Jetty.

Обратите внимание, что вы можете использовать компонент Jetty по умолчанию или компонент Netty.В моей демонстрации у меня была ошибка с клиентами TLS 1.0 и 1.1, которые не могли подключиться, поскольку Jetty 9.4 по умолчанию исключил все небезопасные шифры, и Camel не распространил настройки должным образом на Jetty, что, надеюсь, должно быть решено сейчас.

...