Русский English Тэги View Sergey Zolotaryov's profile on LinkedIn Вход
Конфигурация SSL в Camel - централизовано
Постоянная ссылка 21-12-2016 anydoby java camel

Как известно, Camel рекомендует использовать т.н. JSSE Utility для настроек TLS/SSL в таких компонентах как HTTP,Jetty,CXF и всего другого, где может быть шифрование. Однако ванильный пример со страницы из документации


<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:camel="http://camel.apache.org/schema/spring"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
 
  <camel:sslContextParameters
      id="mySslContext">
 
    <camel:keyManagers
        keyPassword="keyPassword">
      <camel:keyStore
          resource="/users/home/server/keystore.jks"
          password="keystorePassword"/>
    </camel:keyManagers>
 
    <camel:serverParameters
        clientAuthentication="WANT"/>
 
  </camel:sslContextParameters>
 
</beans>

стыдливо умалчивает, что при попытке заменить константы на что-то более рабочее вроде ${mykeystore.file}, не сработает. Ибо, видите ли, у Spring запутанная система резолвинга переменных. Правда, есть ссылка на какой-то PropertyPlaceholder, который мы, естественно, не возьмём, ибо нас устраивает резолвер от спринга. Я честно, кстати, попытался использовать резолвер от Camel и заменить ${} на {{}}, но свойства остались нераскрытыми. Поэтому в голову пришла крамольная мысль, а что если


  <bean id="camelSslContext" class="org.apache.camel.util.jsse.SSLContextParameters">
    <property name="keyManagers">
      <bean class="org.apache.camel.util.jsse.KeyManagersParameters">
        <property name="keyPassword" value="${myKeyPassword}" />
        <property name="keyStore">
          <bean class="org.apache.camel.util.jsse.KeyStoreParameters">
            <property name="resource" value="${myKeystoreFile}" />
            <property name="type" value="JKS" />
            <property name="password" value="${myKeystorePassword}" />
            <property name="camelContext" ref="camelContext" />
          </bean>
        </property>
        <property name="camelContext" ref="camelContext" />
      </bean>
    </property>
    <property name="camelContext" ref="camelContext" />
  </bean>

?

PROFIT.

Теперь можно использовать плейсхолдеры от спринга и вот такие маршруты для SSL:


jetty:https://localhost:8080/mywebsite?sslContextParameters=#camelSslContext

без оглядок на глючащие тэги от Camel.

Добавить комментарий

Предыдущая статья VPN для бедных