(1) I don't know how to implement .Net web service providers so can't help you there. For Java you'd need the WSP-side configuration as shown in the blog entry, namely, have the servlet running the web service use SSL.

For (3) yes, it should in most cases be all you need for the client. More advanced config primarily comes in when you need to specify specific encryption libraries to use other than the JDK's default ones.

(4) I can't help you on, as I haven't researched using WS-SecurityPolicy to activate transport-layer encryption (I'm not even sure it can be done that way, as you still need to configure the servlet container holding your WSP provider to use SSL, and same story I would assume with embedded Jetty via Endpoint.publish()). Others here may know more.

HTH,
Glen


On 10/13/2011 11:31 AM, Beyer, Doug wrote:
Thanks for the response.

 From the article your referenced, my take away is:

1) I don't think I need to do anything with the web server side of things, 
correct?
2) I've confirmed that for our web services, no specific certificates are 
needed on the client side.
3) The client needs to ensure that the protocol being used HTTPS and that the 
login credentials get sent correctly. Am I correct in that if I use

             ClientService svcObj = new ClientService();
             IClientService svc = svcObj.getCustomBindingIClientService();
             BindingProvider provider = (BindingProvider)svc;
             provider.getRequestContext().put( BindingProvider.ENDPOINT_ADDRESS_PROPERTY, 
"https://dev.socsuite.com/Services/ClientService.svc";);
             provider.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, 
"username");
             provider.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, 
"password");

Then the need for **all** this configuration goes away:

     <http:conduit name="http://dev.socsuite.com/Services/.*";>

       <!-- Hopefully this sets up a SOAP Security element?!? -->
       <http:authorization>
         <sec:UserName><the user name></sec:UserName>
         <sec:Password><the password></sec:Password>
       </http:authorization>

       <!-- Should set up https. -->
       <http:tlsClientParameters 
secureSocketProtocol="SSL"></http:tlsClientParameters>

     </http:conduit>

4) Assuming that #3 above was correct but I still want to use configuration, do 
you have any comments about my configuration shown in the original email and 
how that might be causing the runtime error shown in the CXF debug log output? 
Do I need to spend time understanding WS-Policy to get around that runtime 
error?

Thanks again for helping.



-----Original Message-----
From: Glen Mazza [mailto:[email protected]]
Sent: Thursday, October 13, 2011 8:04 AM
To: [email protected]
Subject: Re: Configuration for https

Might this help you:
http://www.jroller.com/gmazza/entry/ssl_for_web_services ?  It may be easier to 
just hardcode the use of SSL rather than rely on WS-Policy statements 
implementing it.

Glen

On 10/13/2011 10:34 AM, Beyer, Doug wrote:
I'm trying to connect to our own .Net web services using java. I need to use 
HTTPS. 
http://cxf.apache.org/docs/client-http-transport-including-ssl-support.html is 
a bit confusing as the configuration examples shown don't seem to align 
correctly with the data in the CXF 2.4.2 
samples\wsdl_first_https\wsdl\hello_world.wsdl file.

I am not an expert in Spring or CXF and am just trying to get my java web 
service client configured as quickly as possible.

Below is a snippet containing the pertinent (I hope) sections from our wsdl:

<wsdl:definitions name="ClientService" targetNamespace="http://www.troppussoftware.com/service/2010/12/"; xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"; xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex"; 
xmlns:wsa10="http://www.w3.org/2005/08/addressing"; xmlns:tns="http://www.troppussoftware.com/service/2010/12/"; xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"; 
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"; xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"; xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy"; 
xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract"; xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"; xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"; 
xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"; xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"; xmlns:xsd="http://www.w3.org/2001/XMLSchema"; xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";>
     <wsp:Policy wsu:Id="CustomBinding_IClientService_policy">
        <wsp:ExactlyOne>
           <wsp:All>
              <sp:TransportBinding 
xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy";>
                 <wsp:Policy>
                    <sp:TransportToken>
                       <wsp:Policy>
                          <sp:HttpToken/>
                       </wsp:Policy>
                    </sp:TransportToken>
                    <sp:AlgorithmSuite>
                       <wsp:Policy>
                          <sp:Basic256/>
                       </wsp:Policy>
                    </sp:AlgorithmSuite>
                    <sp:Layout>
                       <wsp:Policy>
                          <sp:Strict/>
                       </wsp:Policy>
                    </sp:Layout>
                </wsp:Policy>
              </sp:TransportBinding>
              <sp:SignedSupportingTokens 
xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy";>
                 <wsp:Policy>
                    <sp:UsernameToken 
sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient";>
                       <wsp:Policy>
                          <sp:WssUsernameToken10/>
                       </wsp:Policy>
                    </sp:UsernameToken>
                 </wsp:Policy>
              </sp:SignedSupportingTokens>
              <sp:Wss11 
xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy";>
                 <wsp:Policy/>
              </sp:Wss11>
              <sp:Trust10 
xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy";>
                 <wsp:Policy>
                    <sp:MustSupportIssuedTokens/>
                    <sp:RequireClientEntropy/>
                    <sp:RequireServerEntropy/>
                 </wsp:Policy>
              </sp:Trust10>
              <wsaw:UsingAddressing/>
           </wsp:All>
        </wsp:ExactlyOne>
     </wsp:Policy>

...

     <wsdl:service name="ClientService">
        <wsdl:port name="CustomBinding_IClientService" 
binding="tns:CustomBinding_IClientService">
           <soap12:address 
location="http://dev.socsuite.com/Services/ClientService.svc/ClientService"/>
           <wsa10:EndpointReference>
              
<wsa10:Address>http://dev.socsuite.com/Services/ClientService.svc/ClientService</wsa10:Address>
              <Identity 
xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity";>
                 <Dns>localhost</Dns>
              </Identity>
           </wsa10:EndpointReference>
        </wsdl:port>
     </wsdl:service>
</wsdl:definitions>


   From 
http://cxf.apache.org/docs/client-http-transport-including-ssl-support.html , I 
decided to use the following shorthand since all our clients will need the same 
https conduit for all our services:
Another option for the name attribute is a reg-ex expression for the ORIGINAL 
URL of the endpoint. The configuration is matched at conduit creation so the 
address used in the WSDL or used for the JAX-WS Service.create(...) call can be 
used for the name. For example, you can do:
     <http:conduit name="http://localhost:8080/.*";>
         ......
     </http:conduit>
to configure a conduit for all interactions on localhost:8080. If you have 
multiple clients interacting with different services on the same server, this 
is probably the easiest way to configure it.
That same CXF web page references a blog entry at 
http://techpolesen.blogspot.com/2007/08/using-ssl-with-xfirecxf-battling.html . 
Using the info from that blog entry, the CXF web page, and my wsdl, I decided 
to use the following conduit configuration in my cxf.xml:

      <http:conduit name="http://dev.socsuite.com/Services/.*";>

          <http:authorization>

              <sec:UserName><the user name></sec:UserName>

              <sec:Password><the password></sec:Password>

          </http:authorization>

          <http:tlsClientParameters
secureSocketProtocol="SSL"></http:tlsClientParameters>

      </http:conduit>
When I attempt to execute a method of our web service, I get the following from 
the CXF debug logging (with log level = INFO):
Oct 13, 2011 7:28:46 AM
org.springframework.context.support.AbstractApplicationContext
prepareRefresh
INFO: Refreshing
org.apache.cxf.bus.spring.BusApplicationContext@11a01dd: startup date
[Thu Oct 13 07:28:46 PDT 2011]; root of context hierarchy Oct 13, 2011
7:28:46 AM org.apache.cxf.bus.spring.BusApplicationContext
getConfigResources
INFO: Loaded configuration file cxf.xml.
Oct 13, 2011 7:28:46 AM
org.springframework.beans.factory.xml.XmlBeanDefinitionReader
loadBeanDefinitions
INFO: Loading XML bean definitions from file
[D:\Dev\phoenix_git\protocolprototype2\CxfWebServices\cxf.xml]
Oct 13, 2011 7:28:47 AM
org.springframework.beans.factory.support.DefaultListableBeanFactory
preInstantiateSingletons
INFO: Pre-instantiating singletons in
org.springframework.beans.factory.support.DefaultListableBeanFactory@1
abcd9b: defining beans
[cxf,org.apache.cxf.bus.spring.BusWiringBeanFactoryPostProcessor,org.a
pache.cxf.bus.spring.Jsr250BeanPostProcessor,org.apache.cxf.bus.spring
.BusExtensionPostProcessor,org.apache.cxf.wstx_msv_validation.Woodstox
ValidationImpl,LoggingInInterceptor,LoggingOutInterceptor,cxf.config0,
http://dev.socsuite.com/Services/.*]; root of factory hierarchy Oct
13, 2011 7:28:47 AM
org.apache.cxf.service.factory.ReflectionServiceFactoryBean
buildServiceFromWSDL
INFO: Creating Service
{http://www.troppussoftware.com/service/2010/12/}ClientService from
WSDL: file:wsdl/ClientService.svc.wsdl Oct 13, 2011 7:28:48 AM
org.apache.cxf.ws.policy.AssertionBuilderRegistryImpl
handleNoRegisteredBuilder
WARNING: No assertion builder for type 
{http://schemas.xmlsoap.org/ws/2005/07/securitypolicy}HttpToken registered.
Oct 13, 2011 7:28:48 AM
org.apache.cxf.ws.policy.attachment.wsdl11.Wsdl11AttachmentPolicyProvi
der getElementPolicy
WARNING: Failed to build the policy
'CustomBinding_IClientService_policy':org.apache.neethi.builders.Primi
tiveAssertion cannot be cast to
org.apache.cxf.ws.security.policy.model.Token
ERROR - login_1() - javax.xml.ws.soap.SOAPFaultException:
org.apache.neethi.builders.PrimitiveAssertion cannot be cast to
org.apache.cxf.ws.security.policy.model.Token
Is the problem simple like mis-matched jars or does it have to do with my 
configuration?
Thanks in advance for your help.




--
Glen Mazza
Talend - http://www.talend.com/apache
Blog - http://www.jroller.com/gmazza
Twitter - glenmazza






--
Glen Mazza
Talend - http://www.talend.com/apache
Blog - http://www.jroller.com/gmazza
Twitter - glenmazza


Reply via email to