我正在尝试从自签名证书创建密钥库和信任库文件,以便在JBoss ESB中部署的HTTPRouter操作中使用。我使用openssl检索感兴趣的证书,并使用以下命令生成密钥库文件和信任库文件:
keytool -import -alias ejb-ssl -file cert.der -keystore cert.truststore
keytool -import -alias ejb-ssl -file cert.der -keystore cert.keystore -trustcacerts
在生成密钥库和信任库文件之前,我将证书转换为X509格式,否则keytool实用程序不起作用,返回带有“输入不是x.509证书”异常的异常。要转换感兴趣的证书,我使用以下命令:
openssl x509 -in cert.cer -outform DER -out cert.der
然后我将这些文件复制到我的ESB的'esbcontent / META-INF'文件夹中。以下是我为HTTPRouter操作设置的属性
#Configurators
configurators=HttpProtocol
#HttpProtocol Config...
protocol-socket-factory=org.jboss.soa.esb.http.protocol.SelfSignedSSLProtocolSocketFactoryBuilder
keystore=/META-INF/keystore/cert.keystore
keystore-passw=password
truststore=/META-INF/truststore/cert.truststore
truststore-passw=password
当我部署ESB时,我收到以下错误:
Caused by: org.jboss.soa.esb.ConfigurationException: Invalid 'keystore' config. Must be valid URL.
查看从第三方Web服务检索到的证书,所有URL看起来都不错。有没有人知道为什么JBoss不接受生成的密钥库中的URL?我开始把这头发撕掉了!
另外,我一直在尝试使用org.apache.commons.httpclient.contrib.ssl.EasySSLProtocolSocketFactory作为protocol-socket-factory。使用它时,ESB部署正常。但是,HTTPRouter似乎不会将请求发送到第三方Web服务。我已经使用SoapUI来建立Web服务没问题,所以我认为我的HTTPRouter动作配置存在问题。
提供的任何帮助都非常有用!
答案 0 :(得分:2)
这花了我很长时间才弄明白,但解决方案结果非常简单。密钥库文件的路径必须是绝对的。它不可能是相对的!因此,替换
'/META-INF/keystore/cert.keystore' path
带
'C:/dev/server/jboss/jboss-as/server/default/deploy/MyEsb.esb/META-INF/keystore/cert.keystore
解决了问题!
当想要在各种不同的环境(Windows和Ubuntu)中部署ESB时,保留具有此绝对路径的属性文件并不总是合适的。我使用gradle作为构建工具,因此我使用ReplaceTokens功能将keystore令牌替换为所需的绝对路径。我想您也可以将密钥库文件复制到deploy目录中,以便所有需要它的ESB都可以使用它。
希望这可以帮助遇到此问题的其他人。最后是一个简单的解决方案,但在文档中没有提到要使用绝对路径引用的密钥库文件。但是,这样做可以解决我的问题。
由于