2011-09-13 33 views
3

我試圖從自簽名證書中創建一個密鑰庫和信任庫文件,用於在JBoss ESB中部署的HTTPRouter操作。我使用OpenSSL的檢索感興趣的證書和生成一個密鑰存儲文件和信任庫文件用下面的命令:使用密鑰庫文件部署HTTPRouter操作的問題

keytool -import -alias ejb-ssl -file cert.der -keystore cert.truststore 
keytool -import -alias ejb-ssl -file cert.der -keystore cert.keystore -trustcacerts 

之前生成的密鑰庫和信任文件,我轉換證書X509格式,否則密鑰工具實用程序不起作用,並返回一個異常消息'輸入不是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服務檢索到的證書,所有網址看起來好。有沒有人有任何想法爲什麼JBoss不會接受生成的密鑰庫中的URL?我開始在這一個上撕掉我的頭髮!

此外,我一直在嘗試使用協議套接字工廠的org.apache.commons.httpclient.contrib.ssl.EasySSLProtocolSocketFactory。當使用這個時,ESB部署OK。但是,HTTPRouter似乎沒有將請求發送到第三方Web服務。我已經使用SoapUI來建立Web服務,因此我認爲這是我配置HTTPRouter操作的一個問題。

提供的任何幫助非常appreaciated!

回答

2

這花了我很長時間才弄清楚,但解決方案結果非常簡單。密鑰庫文件的路徑必須是絕對路徑。它不可能是相對的!因此,

'C:/dev/server/jboss/jboss-as/server/default/deploy/MyEsb.esb/META-INF/keystore/cert.keystore 

問題解決了更換

'/META-INF/keystore/cert.keystore' path 

當想要在各種不同的環境(Windows和Ubuntu)中部署ESB時,使用此絕對路徑保留屬性文件並不總是合適的。我使用gradle作爲我的構建工具,因此我使用ReplaceTokens功能將密鑰庫令牌替換爲所需的絕對路徑。我想你也可以將keystore文件複製到deploy目錄中,以便所有需要它的ESB都可用。

希望這可以幫助解決此問題的其他人。最終是一個簡單的解決方案,但文檔中沒有提到用絕對路徑引用密鑰庫文件的任何地方。但是,這樣做解決了我的問題。

謝謝

相關問題