Jetty适用于HTTP但不适用于HTTPS

时间:2013-12-05 20:42:48

标签: scala jetty apache-camel akka

我正在努力创建一个码头消费者。我能够使用端点uri成功运行它:

jetty:http://0.0.0.0:8080

但是,当我修改端点uri为https:

jetty:https://0.0.0.0:8443

页面超时尝试加载。这似乎很奇怪,因为camel documentation表明它应该开箱即用。

我已经将签名的SSL加载到java的默认密钥库中,我试图在下面加载它:http://camel.apache.org/jetty.html

我有一个基本的Jetty实例,使用带有akka和scala的akka​​-camel库。例如:

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 => {
            ...
        }
        ...
    }
    ...
}

这导致了一些进展,因为页面不再超时,而是给出“连接被中断”错误。我不知道从哪里开始,因为骆驼不会抛出任何异常,而是默默地在某处(显然)失败。

有人知道会导致这种行为吗?

1 个答案:

答案 0 :(得分:1)

使用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实现Jetty over SSL(令人惊讶的是,似乎没有例子存在)