Java 在ApacheCamel上为HTTPS实现API(SSL)的最佳方法是什么?
我希望使用ApacheCamel创建的API能够启用HTTPS。我已经对各种方法(使用Jetty、Netty等)进行了一些阅读,但我想知道在基于camel的API中实现SSL的最简单、最有效的方法是什么。这是我当前的配置,我更喜欢(为了简单起见,如果我可以使用Netty4HTTP)Java 在ApacheCamel上为HTTPS实现API(SSL)的最佳方法是什么?,java,apache,maven,apache-camel,netty,Java,Apache,Maven,Apache Camel,Netty,我希望使用ApacheCamel创建的API能够启用HTTPS。我已经对各种方法(使用Jetty、Netty等)进行了一些阅读,但我想知道在基于camel的API中实现SSL的最简单、最有效的方法是什么。这是我当前的配置,我更喜欢(为了简单起见,如果我可以使用Netty4HTTP) 谢谢大家 您可以按照官方文件中的说明配置Netty4组件,方法是首先指定要使用的SSLContextParameters,该参数仅定义在SSL握手过程中要使用的证书的位置,然后将其设置到netty组件上: KeySt
谢谢大家 您可以按照官方文件中的说明配置Netty4组件,方法是首先指定要使用的
SSLContextParameters
,该参数仅定义在SSL握手过程中要使用的证书的位置,然后将其设置到netty组件上:
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);
NettyComponent nettyComponent = getContext().getComponent("netty4", NettyComponent.class);
nettyComponent.setSslContextParameters(scp);
如果使用Spring(Boot),这可以在Camel的上下文初始化例程中轻松完成:
@Bean
CamelContextConfiguration contextConfiguration() {
return new CamelContextConfiguration() {
@Override
public void beforeApplicationStart(CamelContext camelContext) {
// code goes in here
}
@Override
public void afterApplicationStart(CamelContext camelContext) {
// noop
}
};
}
请注意,上面的组件名为netty4
,这也应反映在rest配置部分中:
restConfiguration()
.component("netty4")
.host("0.0.0.0")
.scheme("https")
.port(8443)
...
我们可以看到类似的方法,只是在我的一个技术演示项目中将Jetty配置为HTTP服务器,该项目将HTTP服务器保存在自己的bean中,该bean被注入到中,后者只是将该参数设置到定制的Jetty组件上。稍后,restConfiguration
是某些通过Jetty暴露端点的路由将从中扩展
进一步注意,您可以使用默认的Jetty或Netty组件。在我的演示中,TLS 1.0和1.1客户端出现了一个错误,无法作为Jetty 9.4连接。默认情况下,排除了所有不安全的密码,Camel没有将设置正确传播到Jetty,希望现在可以解决这个问题。您可以按照官方文件中的说明配置Netty4组件,方法是首先指定要使用的
SSLContextParameters
,它只定义在SSL握手过程中要使用的证书的位置,然后将其设置到netty组件上:
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);
NettyComponent nettyComponent = getContext().getComponent("netty4", NettyComponent.class);
nettyComponent.setSslContextParameters(scp);
如果使用Spring(Boot),这可以在Camel的上下文初始化例程中轻松完成:
@Bean
CamelContextConfiguration contextConfiguration() {
return new CamelContextConfiguration() {
@Override
public void beforeApplicationStart(CamelContext camelContext) {
// code goes in here
}
@Override
public void afterApplicationStart(CamelContext camelContext) {
// noop
}
};
}
请注意,上面的组件名为netty4
,这也应反映在rest配置部分中:
restConfiguration()
.component("netty4")
.host("0.0.0.0")
.scheme("https")
.port(8443)
...
我们可以看到类似的方法,只是在我的一个技术演示项目中将Jetty配置为HTTP服务器,该项目将HTTP服务器保存在自己的bean中,该bean被注入到中,后者只是将该参数设置到定制的Jetty组件上。稍后,restConfiguration
是某些通过Jetty暴露端点的路由将从中扩展
进一步注意,您可以使用默认的Jetty或Netty组件。在我的演示中,TLS 1.0和1.1客户端出现了一个错误,无法连接到Jetty 9.4,默认情况下排除了所有不安全的密码,Camel没有将设置正确地传播到Jetty,希望现在可以解决