Как опубликовать веб-сервис через HTTPS с JAX-WS в контейнере OSGi? - PullRequest
0 голосов
/ 30 июня 2011

С помощью Java легко использовать веб-сервис через HTTPS, но как его опубликовать?

Стандартная реализация JAX-WS не поддерживает его.Мы пробовали Jetty, но Jetty также не поддерживает веб-службы через HTTPS (JettyHttpServerProvider createHttpsServer() выдает UnsupportedOperatonException).Я думаю, что эта проблема должна быть действительно легкой.Но почему-то я всегда бегу к стенам.

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

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

Почему это так важно?Например, чтобы предоставить статический контент в Jetty, все, что вам нужно сделать, это создать сервер, добавить любой SSL-коннектор, и все готово.Почему веб-службам не может быть так просто?

Ответы [ 2 ]

1 голос
/ 01 июля 2011

Наша система использует cxf и jetty в OSGi, и она отлично работает с HTTPS.

Когда вы публикуете свой сервис в WebService, вам не следует беспокоиться, что это HTTP или HTTPS.Сконфигурируйте ваш Jetty для поддержки HTTPS, передав следующие свойства в OSGi:

org.eclipse.equinox.http.jetty.http.enabled=false
org.eclipse.equinox.http.jetty.https.enabled=true
org.eclipse.equinox.http.jetty.https.port=443
org.eclipse.equinox.http.jetty.ssl.keystore=...
org.eclipse.equinox.http.jetty.ssl.password=...

Вы можете проверить другие свойства в

org.eclipse.equinox.http.jetty_2.0.0.v20100503.jar\OSGI-INF\metatype\config.xml

Сделав это, вы можете попробовать использовать IEчтобы получить доступ к wsdl вашего сервиса через https.

1 голос
/ 01 июля 2011

Если вы используете пружину, вы можете использовать следующую конфигурацию. Эта статья о FuseSource дает хорошее объяснение шагов, необходимых для настройки.

<beans xmlns="http://www.springframework.org/schema/beans" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns:sec="http://cxf.apache.org/configuration/security" 
  xmlns:http="http://cxf.apache.org/transports/http/configuration" 
  xmlns:httpj="http://cxf.apache.org/transports/http-
jetty/configuration" 
  xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" 
  xsi:schemaLocation=" 
       http://cxf.apache.org/configuration/security       http: 
//cxf.apache.org/schemas/configuration/security.xsd 
            http://cxf.apache.org/transports/http/configuration
            http://cxf.apache.org/schemas/configuration/http-conf.xsd
            http://cxf.apache.org/transports/http-jetty/configuration
            http://cxf.apache.org/schemas/configuration/http-jetty.xsd
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-
2.0.xsd"> 


  <http:destination name="{http://package}AnInterfacePort.http- 
destination"> 
  </http:destination> 

  <httpj:engine-factory bus="cxf"> 
   <httpj:engine port="9001"> 
    <httpj:tlsServerParameters> 
      <sec:keyManagers keyPassword="password"> 
           <sec:keyStore type="JKS" password="password" 
                file="C:/certs/cherry.jks"/> 
      </sec:keyManagers> 
      <sec:trustManagers> 
          <sec:keyStore type="JKS" password="password" 
               file="C:/certs/truststore.jks"/> 
      </sec:trustManagers> 
      <sec:cipherSuitesFilter> 
        <!-- these filters ensure that a ciphersuite with 
          export-suitable or null encryption is used, 
          but exclude anonymous Diffie-Hellman key change as 
          this is vulnerable to man-in-the-middle attacks --> 
        <sec:include>.*_EXPORT_.*</sec:include> 
        <sec:include>.*_EXPORT1024_.*</sec:include> 
        <sec:include>.*_WITH_DES_.*</sec:include> 
        <sec:include>.*_WITH_NULL_.*</sec:include> 
        <sec:exclude>.*_DH_anon_.*</sec:exclude> 
      </sec:cipherSuitesFilter> 
      <sec:clientAuthentication want="true" required="true"/> 
    </httpj:tlsServerParameters> 
   </httpj:engine> 
  </httpj:engine-factory> 


  <!-- We need a bean named "cxf" --> 
  <bean id="cxf" class="org.apache.cxf.bus.CXFBusImpl"/> 
</beans> 
...