Проблемы с развертыванием действия HTTPRouter с файлом хранилища ключей

Я пытаюсь создать файл хранилища ключей и доверенных сертификатов из самозаверяющего сертификата для использования в действии HTTPRouter, развернутом в ESB JBoss. Я использовал 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

Затем я скопировал эти файлы в папку esbcontent/META-INF моего ESB. Ниже приведены свойства, которые я устанавливаю для действия 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-адреса выглядят нормально. Кто-нибудь знает, почему JBoss не принимает URL-адрес в сгенерированном хранилище ключей? Я начинаю рвать на себе волосы по этому поводу!

Кроме того, я пытался использовать org.apache.commons.httpclient.contrib.ssl.EasySSLProtocolSocketFactory для фабрики протоколов-сокетов. При использовании этого ESB разворачивается нормально. Однако HTTPRouter, похоже, не отправляет запрос сторонней веб-службе. Я использовал SoapUI, чтобы установить, что веб-служба в порядке, поэтому я думаю, что это проблема с моей конфигурацией действия HTTPRouter.

Любая предлагаемая помощь приветствуется!


person ScreamingMage    schedule 13.09.2011    source источник


Ответы (1)


Мне потребовалось ужасно много времени, чтобы понять это, но решение оказалось очень простым. Путь к файлу хранилища ключей должен быть абсолютным. НЕ МОЖЕТ БЫТЬ ОТНОСИТЕЛЬНЫМ! Следовательно, замена

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

с

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

Решил проблему!

Оставлять файл свойств с этим абсолютным путем не всегда удобно, если вы хотите развернуть ESB в разных средах (Windows и Ubuntu). Я использую gradle в качестве инструмента сборки, поэтому я использовал функцию ReplaceTokens, чтобы заменить токен хранилища ключей на требуемый абсолютный путь. Я полагаю, вы также можете скопировать файл хранилища ключей в каталог развертывания, чтобы он был доступен для всех ESB, которым он требуется.

Надеюсь, это поможет кому-то еще, кто сталкивается с этой проблемой. В конце концов, это было простое решение, но в документах нигде не упоминается, что файл хранилища ключей должен быть указан с абсолютным путем. Но это решило проблему для меня.

Спасибо

person ScreamingMage    schedule 16.09.2011