Проблема с Mule cxf: исходящая конечная точка (клиент) и HTTPS / SSL - PullRequest
1 голос
/ 27 октября 2010

У меня небольшая проблема с настройкой транспорта CXF в Mule 2.2 для вызова WS-метода для службы, доступной через HTTPS / SSL.Вызов того же метода с использованием простого HTTP работает нормально.Я много искал по этой проблеме и нашел среди прочего следующую ссылку:

http://www.mulesoft.org/documentation/display/MULE2CB/Using+HTTPS+with+CXF

, что полезно, но есть еще несколько вещей, которые я не до конца понимаю:

  • Конечная точка CXF настроена следующим образом: т.е. она находится в пространстве имен cxf.Имеет ли пространство имен cxf какое-либо отношение к пространству имен https для настройки, как описано в ссылке?

  • Что еще более запутанно, так это то, что Mule - это то, что я взял на себяот предыдущего разработчика и предположительно работает над SSL как есть, но в файлах конфигурации Mule я не могу найти никаких следов конфигурации коннектора https :.Из информации в ссылке у меня сложилось впечатление, что это обязательно, по крайней мере, «хранилище ключей сервера» и «хранилище доверия», например:

    <https:connector name="myHttpsConnector">
        <https:tls-key-store path="serverKeystore" keyPassword="mulepassword"
             storePassword="mulepassword"/>
        <https:tls-server path="trustStore" storePassword="mulepassword"/>
    </https:connector>
    

Что я делаювойти в журнал Mule при попытке подключения к WS с поддержкой HTTPS, как показано ниже, и он явно связан с ключом SSL, но я пропускаю последний фрагмент, чтобы все это стало на свои места.Любая помощь и комментарии по этому вопросу будут очень ценны.

/ Ола

********************************************************************************
Message               : Failed to invoke lifecycle phase "initialise" on object:
HttpsConnector{this=a7769e, started=false, initialised=false,
name='connector.https.0', disposed=false, numberOfConcurrentTransactedReceivers=4,
createMultipleTransactedReceivers=true, connected=false, supportedProtocols=[https],
serviceOverrides=null}
Type                  : org.mule.api.lifecycle.LifecycleException
Code                  : MULE_ERROR-70228
JavaDoc               : http://www.mulesource.org/docs/site/current2/apidocs/org/mule/api/lifecycle/LifecycleException.html
********************************************************************************
Exception stack is:
1. The Key password cannot be null (java.lang.IllegalArgumentException)
org.mule.api.security.tls.TlsConfiguration:290 (null)
2. Failed to invoke lifecycle phase "initialise" on object: 
HttpsConnector{this=a7769e, started=false, initialised=false, 
name='connector.https.0', disposed=false, numberOfConcurrentTransactedReceivers=4, 
createMultipleTransactedReceivers=true, connected=false, supportedProtocols=[https], 
serviceOverrides=null} (org.mule.api.lifecycle.LifecycleException)
org.mule.lifecycle.DefaultLifecyclePhase:277 (http://www.mulesource.org/docs/site
/current2/apidocs/org/mule/api/lifecycle/LifecycleException.html)
********************************************************************************
Root Exception stack trace:
java.lang.IllegalArgumentException: The Key password cannot be null
    at
org.mule.api.security.tls.TlsConfiguration.assertNotNull(TlsConfiguration.java:290)
at org.mule.api.security.tls.TlsConfiguration.validate(TlsConfiguration.java:208)
...
..

1 Ответ

1 голос
/ 24 марта 2011

Если нет соединителя Mule https:, это может означать, что внешняя служба выполняет часть SSL (например, сервер JBoss).Хотя у меня нет опыта делать это самому.

Но если все делается через Mule, вам также нужно установить свойства клиента (как описано в ссылке, которую вы упомянули):

<https:tls-client path="clientKeystore" storePassword="mulepassword" />

И резюмируем различные хранилища ключей (что может сбивать с толку):

  • clientKeyStore содержит ключи вашего клиента
  • serverKeyStore содержит ключи вашего сервера
  • trustStore содержит открытые ключи всех пиров, то есть ключи клиентов, подключающихся к вашему серверу, ключи любых внешних серверов (например, ws, который вы пытаетесьподключиться к)

Но полученное сообщение об ошибке указывает на отсутствие ключа пароля.Этого не должно быть, если вы правильно настроили хранилища ключей и коннектор https.

...