使用apache camel连接到https服务器

时间:2016-03-18 14:05:08

标签: ssl https apache-camel ssl-certificate apache-servicemix

我的问题的背景:

我正在使用servicemix中的apache camel,我正在开发一个包。在此捆绑包中,以下端点在路径中定义:

<to uri="https4://URL_I_WANT_TO_CONNECT_TO?proxyAuthHost=MY_PROXY_HOST_NAME&amp;proxyAuthPort=MY_PROXY_PORT&amp;sslContextParameters=mySslContextParameters" />

正如您在“uri”属性的值中所看到的,我使用的是HTTP代理。

我的目标是对“URL_I_WANT_TO_CONNECT_TO”执行HTTP POST请求。我已经获得3个证书(3“.cer”文件,根据这些文件的名称,我猜有一个用于服务器,一个用于CA,一个用于CA中间)。让我们将这3个证书命名为“cert_server.cer”,“cert_ca.cer”和“cert_ca_intermediate.cer”。

我使用“keytool”工具创建了一个名为“keystore.jks”的文件。通过按以下顺序执行以下三个命令来完成此创建:

keytool -import -keystore keystore.jks -file cert_server.cer -alias "server"
keytool -import -keystore keystore.jks -file cert_ca.cer -alias "ca"
keytool -import -keystore keystore.jks -file cert_ca_intermediate.cer -alias "ca_intermediate"

注意:我对所有证书使用了相同的密码

然后我在与我的bundle对应的java项目中添加了文件“keystore.jks”和3个证书,并定义了以下sslContextParameters(在先前定义的端点的“uri”属性的值中引用)在我的包的蓝图文件中:

<sslContextParameters id="mySslContextParameters"
    xmlns="http://camel.apache.org/schema/blueprint">
    <keyManagers keyPassword="abcde">
        <keyStore resource="/key/keystore.jks" password="abcde" />
    </keyManagers>
</sslContextParameters>

问题是它不起作用(我无法连接到“URL_I_WANT_TO_CONNECT_TO”),我唯一的信息是以下日志消息:“错误:握手期间远程主机关闭连接”。我不知道如何解决这个问题。

HTTP代理可能是问题的根源吗?

感谢您的帮助。

祝你好运

1 个答案:

答案 0 :(得分:-1)

如果您的证书用于联系SSL服务器(而不是用于身份验证),请查看TrustManagersParameters(而不是KeyStoreParameters)。

http://camel.apache.org/camel-configuration-utilities.html#CamelConfigurationUtilities-TrustManagersParameters