149.18.4. 为 HTTP 客户端设置 SSL
使用 JSSE 配置实用程序
从 Camel 2.8 开始,HTTP4 组件支持通过 Camel JSSE 配置实用程序 的 SSL/TLS 配置。 这个实用程序可大大减少您需要编写的组件特定代码的数量,并在端点和组件级别进行配置。 以下示例演示了如何将 实用程序与 HTTP4 组件搭配使用。
此组件中使用的 Apache HTTP 客户端的版本从全局"protocol" registry 中解析 SSL/TLS 信息。 此组件提供了一个实施, org.apache.camel.component.http.SSLContextParametersSecureProtocolSocketFactory (HTTP 客户端协议套接字工厂 )来支持使用 Camel JSSE 配置实用程序。 以下示例演示了如何配置协议 registry,并使用路由中的注册协议信息。
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);
ProtocolSocketFactory factory =
new SSLContextParametersSecureProtocolSocketFactory(scp);
Protocol.registerProtocol("https",
new Protocol(
"https",
factory,
443));
from("direct:start")
.to("https://mail.google.com/mail/").to("mock:results");直接配置 Apache HTTP 客户端
在 Apache HTTP 客户端之上构建了 camel-http 组件,您可以实施自定义 org.apache.camel.component.http.HttpClientConfigurer,以便在 http 客户端上执行一些配置。
但是,如果您只想 指定密钥存储和信任存储,您可以使用 Apache HTTP HttpClientConfigurer 进行此操作,例如:
Protocol authhttps = new Protocol("https", new AuthSSLProtocolSocketFactory(
new URL("file:my.keystore"), "mypassword",
new URL("file:my.truststore"), "mypassword"), 443);
Protocol.registerProtocol("https", authhttps);
然后,您需要创建一个实现 HttpClientConfigurer 的类,并注册 https 协议,该协议根据上例提供密钥存储或信任存储。然后,从 camel 路由构建器类中,您可以进行 hook,如下所示:
HttpComponent httpComponent = getContext().getComponent("http", HttpComponent.class);
httpComponent.setHttpClientConfigurer(new MyHttpClientConfigurer());
如果使用 Spring DSL 执行此操作,您可以使用 URI 指定 HttpClientConfigurer。例如:
<bean id="myHttpClientConfigurer" class="my.https.HttpClientConfigurer"> </bean> <to uri="https://myhostname.com:443/myURL?httpClientConfigurerRef=myHttpClientConfigurer"/>
只要您实施 HttpClientConfigurer,并且按照上述步骤配置密钥存储和信任存储,它将正常工作。