我正在尝试创建一个码头消费者。我可以使用端点uri使其成功运行:
jetty:http://0.0.0.0:8080但是,当我修改https的端点uri时:
jetty:https://0.0.0.0:8443页面尝试加载时超时。这似乎很奇怪,因为camel documentation声明它应该开箱即用。
此后,我将一个签名的SSL加载到java的默认keystore中,并尝试在下面实现加载它:http://camel.apache.org/jetty.html
我有一个使用akka和scala的akka-camel库的基本Jetty实例。例如:
class RestActor extends Actor with Consumer {
val ksp: KeyStoreParameters = new KeyStoreParameters();
ksp.setPassword("...");
val kmp: KeyManagersParameters = new KeyManagersParameters();
kmp.setKeyStore(ksp);
val scp: SSLContextParameters = new SSLContextParameters();
scp.setKeyManagers(kmp);
val jettyComponent: JettyHttpComponent = CamelExtension(context.system).context.getComponent("jetty", classOf[JettyHttpComponent])
jettyComponent.setSslContextParameters(scp);
def endpointUri = "jetty:https://0.0.0.0:8443/"
def receive = {
case msg: CamelMessage => {
...
}
...
}
...
}这导致了一些进展,因为页面不再超时,而是给出“连接已中断”错误。我不确定接下来该怎么做,因为camel并没有抛出任何异常,而是在某个地方(显然)默默地失败了。
有没有人知道是什么导致了这种行为?
发布于 2013-12-06 05:43:00
在使用java的"keytool“时,我没有指定输出文件。它没有抛回一个错误,所以它可能去了某个地方。我创建了一个新的密钥库,并显式地将我的crt导入到密钥文件中。然后我显式地将文件路径添加到我创建的密钥库中,现在一切都正常了!
如果我不得不推测,事情可能会默默地失败,因为我将证书添加到jetty的通用证书库中,以便在符合条件的情况下使用,而不是显式地将其绑定为端点的SSL。
class RestActor extends Actor with Consumer {
val ksp: KeyStoreParameters = new KeyStoreParameters();
ksp.setResource("/path/to/keystore");
ksp.setPassword("...");
val kmp: KeyManagersParameters = new KeyManagersParameters();
kmp.setKeyStore(ksp);
val scp: SSLContextParameters = new SSLContextParameters();
scp.setKeyManagers(kmp);
val jettyComponent: JettyHttpComponent = CamelExtension(context.system).context.getComponent("jetty", classOf[JettyHttpComponent])
jettyComponent.setSslContextParameters(scp);
def endpointUri = "jetty:https://0.0.0.0:8443/"
def receive = {
case msg: CamelMessage => {
...
}
...
}
...
}希望将来有人能将此代码用作使用akka-camel实现SSL上的Jetty的模板(令人惊讶的是,似乎没有任何示例)
https://stackoverflow.com/questions/20410272
复制相似问题