【问题标题】:Using different SSL certificate per Camel+Jetty route每个 Camel+Jetty 路由使用不同的 SSL 证书
【发布时间】:2012-04-13 19:31:06
【问题描述】:

我有一系列使用在 ServiceMix (Fuse) 中运行的 Camel Jetty 组件公开的 Web 服务。比如:

<route>
      <from uri="jetty:http://0.0.0.0:25100/service1"/>
      ...
</route>    
<route>
      <from uri="jetty:http://0.0.0.0:25100/service2"/>
      ...
</route>

我希望能够将它们更改为使用 https/ssl,但我需要能够为每条路由使用不同的密钥/证书。我查看了 Jetty 组件文档,它在描述如何全局配置 Jetty 组件以使用 SSL 方面做得不错,但似乎没有办法为不同的路由指定不同的证书?来自Jetty Component Documentation

<bean id="jetty" class="org.apache.camel.component.jetty.JettyHttpComponent">
    <property name="sslSocketConnectorProperties">
        <properties>
            <property name="password"value="..."/>
            <property name="keyPassword"value="..."/>
            <property name="keystore"value="..."/>
            <property name="needClientAuth"value="..."/>
            <property name="truststore"value="..."/>
        </properties>
    </property>
</bean>

每个路由可以使用不同的证书吗?

【问题讨论】:

  • jetty 在 7.2 的时间范围内增加了对此的支持我认为......在配置 ssl 上下文时,您可以指定一个别名,该别名将用于该 ssl 连接器上的密钥......这种支持是否有一直到骆驼我现在还不确定。最好与他们核实一下,而您的支持者则主张更新到更高的 7.6 版本以进行一些重要的 nio 和 ssl 修复

标签: ssl https apache-camel jetty apache-servicemix


【解决方案1】:

在任何 HTTPS 服务器上,证书都是一个只能为整个主机名配置的属性。

HTTPS 是HTTP over TLS,即首先建立 SSL/TLS 连接,然后再发送任何 HTTP 流量(因此在发送任何 URL 路径之前):

充当 HTTP 客户端的代理也应充当 TLS 客户端。 它应该在适当的端口上启动与服务器的连接 然后发送 TLS ClientHello 开始 TLS 握手。当。。。的时候 TLS 握手已完成。然后客户端可以启动第一个 HTTP 请求。所有 HTTP 数据都必须作为 TLS“应用程序数据”发送。

当它可以根据路径做出决定时,证书已经发送并且 SSL/TLS 握手已经结束。

一种方法是使用不同的主机名。

您可以通过在服务器上配置不同的主机名和 IP 地址来使用与密钥库不同的别名或使用不同的端口来实现此目的。

原则上,您也可以使用服务器名称指示 (SNI) 对同一 IP 地址/端口上的不同主机名执行此操作;不幸的是,即使 Java 7 在服务器端也不支持它 (only on the client side)。一个典型的解决方法是使用对多个主机有效的单个证书,使用多个主题备用名称条目。

【讨论】:

  • 或者只是使用不同的服务器端口并为每个要使用的连接器指定不同的别名,码头支持就好了
  • @jessemcconnell,确实,我只提到了 SNI,但我已经编辑了它以试图澄清这一点。
猜你喜欢
  • 1970-01-01
  • 2015-11-24
  • 2014-08-23
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
  • 2012-04-12
  • 2011-01-31
  • 1970-01-01
相关资源
最近更新 更多