首页 > 解决方案 > 如何在骆驼的 sslContextParameter 中覆盖密钥库别名

问题描述

我们正在尝试使用带有 Tomcat 的骆驼 2.22.0 中的 SSLContextParameter 来处理 https4 请求。

我们的目标是只为具有多个别名的私钥/公钥使用一个密钥库。我们在加载camel时加载spring ssContextParameter,并且在定义hhtps4 Endpoint时我们只想使用别名,而不为我们的路由中的每个Endpoint定义一个新的sslContextParameter(〜50个路由)。

<camel:sslContextParameters id="sslAPPContextParameters"
        xmlns="http://camel.apache.org/schema/spring" >
        <camel:trustManagers>
            <camel:keyStore password="${truststore.jks.file.password}"
                resource="${truststore.jks.file.location}" />
        </camel:trustManagers>
        <camel:keyManagers>
            <camel:keyStore password="${keystore.jks.file.password}"
                resource="${keystore.jks.file.location}" />
        </camel:keyManagers>
    </camel:sslContextParameters>
</beans>

可能吗 ?我找到了“sslContextParameters/@certAlias”,但似乎需要一个新的 sslContextParameter 定义才能使用它,这不是我需要的,因为我们有大量的 camelRoute。

提前致谢。

标签: xmlapache-camelkeystorejkssslcontext

解决方案


我所知道的:

  1. 每个 sslContextParameters 实例有一个(且只有一个)证书别名
  2. HTTP4 组件每个组件仅支持一个 SSLContextParameters 实例(在http://camel.apache.org/http4.html中有明确说明)

这意味着您的 Camel 路由共享相同的 SSL conf,因此在多个位置(并且使用不同的值)覆盖证书别名不是一个好主意。

恐怕唯一的解决方案是定义 HTTP 组件的 N 个变体及其相应的 SSL conf:

<bean id="httpX" class="org.apache.camel.component.http4.HttpComponent">
   <property name="sslContextParameters" ref="sslContextParams1"/>
</bean>

<bean id="httpY" class="org.apache.camel.component.http4.HttpComponent">
   <property name="sslContextParameters" ref="sslContextParams2"/>
</bean>

然后在您的 https 端点中使用适当的端点


推荐阅读