Проблема с Mule cxf:outbound-endpoint (client) и HTTPS/SSL

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

http://www.mulesoft.org/documentation/display/MULE2CB/Использование+HTTPS+with+CXF

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

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

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

    <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)
...
..

person user486442    schedule 27.10.2010    source источник


Ответы (1)


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

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

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

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

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

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

person Brakara    schedule 23.03.2011