我正在尝试从部署在JBoss企业服务总线中的自签名证书创建密钥库和信任库文件,以便在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实用程序将无法工作,并返回异常消息'input not an x.509 certificate‘。为了转换利息证书,我使用以下命令:
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.查看从第三方URL服务检索到的证书,所有URL看起来都正常。有人知道为什么JBoss不接受生成的keystore中的URL吗?我在这件事上已经开始抓狂了!
另外,我一直在尝试将org.apache.commons.httpclient.contrib.ssl.EasySSLProtocolSocketFactory用于协议套接字工厂。使用此选项时,ESB部署正常。但是,HTTPRouter似乎不会将请求发送到第三方web服务。我使用SoapUI来建立web服务是正常的,所以我认为这是我的HTTPRouter操作配置的问题。
所提供的任何帮助都会得到极大的赞赏!
发布于 2011-09-16 19:29:28
我花了很长时间才弄明白,但解决方案被证明是非常简单的。密钥库文件的路径必须是绝对路径。它不能是相对的!因此,替换
'/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标记替换为所需的绝对路径。我想您还可以将keystore文件复制到部署目录中,以便所有需要它的ESB都可以使用它。
希望这篇文章能帮助其他遇到这个问题的人。最后是一个简单的解决方案,但是文档中没有提到使用绝对路径引用keystore文件。但是,这样做为我解决了这个问题。
谢谢
https://stackoverflow.com/questions/7407003
复制相似问题