2017-01-17 41 views
0

С WildFly 8.2.1 я пытаюсь использовать существующий веб-сервис (JAX-WS), используя SSL, но я не видел никакого использования SSL в быстрых стартовых версиях, и информация, которую я смог сделать Google, ограничен , До сих пор я добавил это web.xml:Позвольте webservice использовать SSL

<security-constraint> 
    <display-name>Foo security</display-name> 
    <web-resource-collection> 
     <web-resource-name>FooService</web-resource-name> 
     <url-pattern>/foo/FooService</url-pattern> 
     <http-method>POST</http-method> 
    </web-resource-collection> 
    <user-data-constraint> 
     <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint> 
</security-constraint> 

и это в моем standalone.xml:

<subsystem xmlns="urn:jboss:domain:webservices:1.2"> 
    <wsdl-host>${jboss.bind.address:127.0.0.1}</wsdl-host> 
    <endpoint-config name="Standard-Endpoint-Config"/> 
    <endpoint-config name="Recording-Endpoint-Config"> 
    <pre-handler-chain name="recording-handlers" protocol-bindings="##SOAP11_HTTP ##SOAP11_HTTP_MTOM ##SOAP12_HTTP ##SOAP12_HTTP_MTOM"> 
    <handler name="RecordingHandler" class="org.jboss.ws.common.invocation.RecordingServerHandler"/> 
    </pre-handler-chain> 
    </endpoint-config> 
    <client-config name="Standard-Client-Config"/> 
</subsystem> 

но, видимо, этого недостаточно; когда я смотрю в standalone/data/wsdl/foo.ear/foo.war/FooService/Bar.wsdl я вижу:

<service name="FooService"> 
    <port binding="foowsb:FooBinding" name="FooBinding"> 
     <soap:address location="http://localhost:8080/foo/FooService"/> 
    </port> 
</service> 

Обратите внимание, что в EAR/WAR, то soap:address.location заполняется только с заполнителем (я полагаю, что это значение игнорируется).

Я нашел информацию о настройке области безопасности и создании самозаверяющего сертификата с помощью keytool (что я и сделал), но я совершенно не понимаю, как это должно быть связано.

Я также пытался установить wsdl-uri-scheme=https, но это поддерживается только в более поздних версиях CXF.

+0

Переключиться на форумы JBoss: https://developer.jboss.org/message/967556#967556 –

ответ

0

Кажется, что значение soap:address.location не игнорируется, если он заменяется, так как изменения, что от REPLACE_WITH_ACTUAL_URL к https://REPLACE_WITH_ACTUAL_URL сделал трюк - теперь сервис получил открытый на https://localhost:8443.

Существует еще пару шагов, которые я должен был сделать в standalone.xml: в undertow, добавьте https-listener:

<https-listener name="secure" socket-binding="https" security-realm="SslRealm"/> 

определяют SslRealm:

<security-realm name="SslRealm"> 
    <server-identities> 
     <ssl> 
     <keystore path="foo.keystore" relative-to="jboss.server.config.dir" keystore-password="foo1234" alias="foo" key-password="foo1234"/> 
     </ssl> 
    </server-identities> 
    <authentication> 
     <truststore path="foo.truststore" relative-to="jboss.server.config.dir" keystore-password="foo1234"/> 
    </authentication> 
</security-realm> 

Обратите внимание, что я многократно использовать один и тот же хранилище ключей для сервера и клиентов. А так как мои клиенты ATM в том же узле WF во время разработки, я должен был установить на стороне клиента часть там тоже:

<system-properties> 
    <property name="javax.net.ssl.trustStore" value="${jboss.server.config.dir}/foo.keystore"/> 
    <property name="javax.net.ssl.trustStorePassword" value="foo1234"/> 
    <property name="org.jboss.security.ignoreHttpsHost" value="true"/> 
</system-properties> 

Последнее свойство следует заменить в WF 9+ с cxf.tls-client.disableCNCheck.