I looked into it some more and here is what I have for default behavior for
loading a WSDL over HTTPS:

An <http:conduit> configuration in the context is looked up using the WSDL
URL minus any URL parameters.  So a WSDL located at
https://localhost:8443/service/myservice?wsdl will end up trying to locate a
configuration with ID "https://localhost:8443/service/myservice";.

Wildcards are enabled during this lookup so the bean name can use wildcards
to match just like when configuring the conduit for service invocations
using the ".http-conduit" suffix.

A configuration for WSDL retrieval at the above WSDL URL would look like:

<http:conduit name="https://localhost:8443/service/myservice";>
...
</http:conduit>

I don't believe this is documented anywhere so I will make a point of
getting it into the client HTTP configuration documentation.


-----Original Message-----
From: David Valeri [mailto:[email protected]] 
Sent: Wednesday, July 14, 2010 12:25 PM
To: [email protected]
Subject: RE: writing SSL webservice client

This is actually an interesting question as I am working my way through
similar scenarios right now.  Odds are that it worked with the public Web
service because Thawte is a big commercial CA and is already included in the
cacerts file.  I think that if you do not provide any trust managers on the
client side, you get trust from cacerts.

The fact that your second scenario worked is different than my current
experience when trying to retrieve the WSDL, but not for actual service
invocation.  The configuration you list is fine for production use if you do
the following, encrypt/obfuscate the password value in a properties file and
read it in using Jasypt.  Jasypt extends Spring's property placeholder
capability to support encrypted property values in property files or you can
simply lock the file down such that read access is limited using your OS.
The approach you have to take just depends on your program's security
requirements.

Did you also retrieve the WSDL over SSL in your second scenario or did you
load it from the classpath or file system when you created the client?  The
experience I am seeing is that the WSDL resolution into an InputStream never
happens until deep inside Xerces at which point we are basically opening an
InputStream on a URL using the default JVM JSSE configuration.  There are a
couple attempts to resolve the URL using URLResource but they of course all
fail because of the custom PKI so the InputSource that is provided to Xerces
only has a SystemId and no InputStream.

Is there a way in CXF to force WSDL resolution to use the client TLS config
on the Bus?  I seem to remember seeing this happen with
TransportURIResolver, but the current behavior I am seeing causes the
Configurer to not try configuring the HttpConduit because the bean name is
null.  I have just started to debug this behavior, so any pointers would be
much appreciated.


-----Original Message-----
From: siva naresh [mailto:[email protected]] 
Sent: Wednesday, July 14, 2010 1:41 AM
To: [email protected]
Subject: Re: writing SSL webservice client


I also tried an example locally, Where I generated certificates using
keytool
for the server
and used the same certificate to invoke the server from the client
using trustmanager in the following way.

 <sec:trustManagers> 
            <sec:keyStore type="JKS" password="password"
               file="truststore.jks"/>

it worked fine. But this is not for the production use. What changes do I
need to make for production use ?

what is the way to put the server's public key in the client JDK's cacerts
file. Does CXF has anything to make this automatically?

Does CXF verify the authenticity of the server's public key with the CA?


-- 
View this message in context:
http://cxf.547215.n5.nabble.com/writing-SSL-webservice-client-tp1046827p1086
015.html
Sent from the cxf-user mailing list archive at Nabble.com.


Reply via email to