0

我使用在 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 方面做得不错,但似乎没有办法为不同的路由指定不同的证书?从码头组件文档

<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>

每条路线是否可以使用不同的证书?

4

1 回答 1

1

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

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

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

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

一种允许这样做的方法是使用不同的主机名。

You could do this by configuring different host names and IP addresses on your server to use a different aliases from your keystore, or use a different port.

In principle, you could also do this with distinct host names on the same IP address/port using Server Name Indication (SNI); unfortunately, even Java 7 doesn't support it on the server side (only on the client side). A typical workaround for this is to use a single certificate that is valid for multiple hosts, using multiple Subject Alternative Name entries.

于 2012-04-13T21:04:11.307 回答